Emacs yasnippet的动力学键
我目前正在学习定义yasnippets,但似乎有一个用例我不知道如何使用。 例如,假设我想定义一个ruby代码段,将键“def”扩展为标准函数定义。这很容易做到,但是假设我想让生成函数的参数数量取决于键,比如如果我展开键'def>n',我想要一个具有n个参数的函数定义。我将如何做到这一点 编辑 基本上,我想制作具有HTML插件Emmet所具有行为的动态代码段。 正如下面使用Emmet的abbrev'p*3>div*2'如何创建3对p标记,每个标记中有两个div对,我希望能够Emacs yasnippet的动力学键,emacs,yasnippet,Emacs,Yasnippet,我目前正在学习定义yasnippets,但似乎有一个用例我不知道如何使用。 例如,假设我想定义一个ruby代码段,将键“def”扩展为标准函数定义。这很容易做到,但是假设我想让生成函数的参数数量取决于键,比如如果我展开键'def>n',我想要一个具有n个参数的函数定义。我将如何做到这一点 编辑 基本上,我想制作具有HTML插件Emmet所具有行为的动态代码段。 正如下面使用Emmet的abbrev'p*3>div*2'如何创建3对p标记,每个标记中有两个div对,我希望能够 “def*3>2”生
“def*3>2”生成3个函数定义,每个函数定义有2个参数。这只是一个示例,但基本上我需要量词和嵌套属性。为了帮助您,我为您编写了一个代码片段,它实现了html的功能 你刚才说的是什么。您应该能够将其编辑为 改变它,让它做你想要的,但不会太多 如果所有的工作都是为你做的,那会很有趣;) 我做的第一件事是定义从
"p*3>div*2"
到
我觉得这个片段应该是:
${1:$$(when yas-moving-away-p (crushlist (split-string yas-text ">")))}
但由于某种原因,这对我来说不起作用(如果你发现了,请让我知道!)
如果您对如何实现实际代码片段有任何疑问,
请给我留言,我会尽力提供帮助。为了帮助澄清这一点,我在这个代码段示例中使用的关键点是什么?我假设它不仅仅是“p*3>div*2”。是的,所以我做它的方式是你会放一些钥匙,任何钥匙。然后你把它展开。键入p*3>div*2,然后点击tab
(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 ">")))}