我目前正在学习定义yasnippets,但似乎有一个用例,我无法弄清楚如何使用。 例如,让我们说我想要定义一个ruby代码片段来扩展键“def'进入标准函数定义。这很容易做到,但是假设我想让生成的函数的参数数量取决于键,就像我展开键> def> n ',我想要一个带有 n 参数数量的函数定义。我该如何做到这一点?
修改的
基本上我想制作具有HTML插件Emmet所拥有的行为的动态片段。 正如以下缩写' p * 3> div * 2'与Emmet一起创建3对p标签,每个标签内有两个div对,我希望它可以制作 ' DEF * 3→2'生成3个函数定义,每个函数有2个参数。这只是一个例子,但基本上我想要量词和嵌套属性。
答案 0 :(得分:1)
为了帮助我,我为你编写了代码片段 那是你在说什么你应该能够编辑它 改变它,使它做你想要的,但它不会太多 如果所有工作都为你完成,那就很有趣;)。
我做的第一件事是定义从
转换的函数"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 ">")))}
但由于某些原因这对我不起作用(如果你发现请告诉我!)
如果您对如何实施实际代码段有任何疑问, 给我留言,我会尽力帮忙。