2016-04-22 2 views
1

В настоящее время я участвую в определении yasnippets, но, похоже, это вариант использования, который я не могу понять, как использовать. Например, предположим, что я хочу определить фрагмент ruby, который расширяет ключ «def» до стандартного определения функции. Это очень легко сделать, но предположим, что я хочу, чтобы количество параметров сгенерированной функции зависело от ключа, например, если я развожу ключ «def» n ', мне нужна функция defintion с n количество параметры. Как бы я это сделал?Динамические ключи для yasnippet

редактировать

В основном я хочу, чтобы сделать динамику фрагменты, которые имеют поведение, что HTML плагин Эммет обладает. Как и в следующем аббребрере 'p * 3> div * 2' с Emmet создает 3 пары p-тэгов с двумя div-парами внутри каждого из них, я бы хотел, чтобы было возможно сделать 'def * 3> 2' to сгенерируйте 3 определения функций по 2 аргументам. Это всего лишь пример, но в основном я хочу, чтобы свойства квантификатора и вложенности.

ответ

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

Смежные вопросы