2016-04-22 22 views
1

我目前正在學習定義yasnippets,但似乎有一個用例,我不知道如何使用。 例如,假設我想定義一個ruby代碼片段,它將'def'鍵擴展爲標準函數定義。這很容易做到,但是假設我想讓生成的函數的參數個數取決於鍵,就像我擴展鍵'def>n',我想要一個函數定義n參數。我怎麼做到這一點?yasnippet動態鍵

編輯

基本上我想要做的是有行爲的HTML插件埃米特擁有動態片段。 正如Emmet在下面的縮寫'p * 3> div * 2'中創建3對帶有兩個div對的p標籤一樣,我希望可以使 'def * 3> 2'用兩個參數生成3個函數定義。這只是一個例子,但基本上我想要量詞和嵌套屬性。

回答

1

爲了幫助我,我爲你寫了一個代碼片段,它和你所說的html 做的一樣。你應該可以編輯它到 改變它,以便它可以做你想做的事情,但是如果所有的工作都完成了,它就不會有太多樂趣;)。

我所做的第一件事情是定義不從

"p*3>div*2" 

改造

<p> 
<div> 
</div> 
<div> 
</div> 
</p> 
<p> 
<div> 
</div> 
<div> 
</div> 
</p> 
<p> 
<div> 
</div> 
<div> 
</div> 
</p> 

的函數的功能是:

(defun crushlist (my-list) 
    (if my-list 
     (let* ((elem (car my-list)) 
      (char (first (split-string elem "*"))) 
      (num (string-to-int(second (split-string elem "*"))))) 
     (apply 'concat 
       (cl-loop for i from 1 to num 
         collect (concat "<" char "> 
" (crushlist (cdr my-list)) "</" char "> 
")))) 
    "")) 

的片段則是:

${1:$$(when yas-moving-away-p (move-beginning-of-line nil) (kill-line) (insert (crushlist (split-string yas-text ">"))))} 

我覺得像片斷應該是:

${1:$$(when yas-moving-away-p (crushlist (split-string yas-text ">")))} 

但是這並沒有爲我出於某種原因

如果您有任何問題(如果你發現了,請讓我知道!)關於如何實施您的實際片段, 給我留言,我會盡力幫助。

+0

爲了澄清這一點,我將用這個片段示例的關鍵是什麼?我假設它不只是「p * 3> div * 2」。 –

+0

是的,我這樣做的方式是你會放一些鑰匙,任何鑰匙。然後你擴展它。鍵入p * 3> div * 2,然後點擊標籤 – Jules

+0

@ Y.Khurshid是否爲您工作? – Jules