如何为同一个片段使用多个触发器?


11

我已经制作了一个片段,希望提供不同的触发条件,所以与其说trigger我还想通过以下方式触发它myothertrigger

snippet trigger "just an example" 
my text ...
endsnippet

有没有一种简便的方法可以代替复制代码段?

编辑:明确地说,我正在使用UltiSnips,但是如果有更好的插件,我可能会考虑一下。


2
答案将取决于您所使用的代码片段引擎。使用mu-template时,您可能要包含一个片段,也可以使用其他名称复制该片段文件,或者仅创建符号链接。我不确定其他引擎是否允许。也许有一天他们会来支持“呼叫者”摘要中的摘要。也许您可以在python或viml函数中定义代码段的核心,然后让代码段调用相同的函数?
卢克·赫米特

3
这个问题被标记为plugin-ultisnips,所以我假设OP正在使用ultisnips。
EvergreenTree

我的错误^^'(µTemplate并不是更好,只是差异很大,较旧,并且更适合我的需求(我正在维护):我具有一些代码片段,这些代码片段的功能可以通过不同的选项来调用不同但又非常接近的东西。例如,在C ++中,我有一些基类,值类,异常类的代码段……它们都依赖于同一组类代码段+功能代码段+ ...语法完全不同,并且占位符功能不如您惯用的人机工程学。执行您要查找的内容很容易,但不一定需要进行迁移)
Luc Hermitte

2
如果您切换到Shougo的neosnippet插件,则其语法alias为此具有关键字。
VanLaser

Answers:



5

尽管没有别名的特定语法,但您可以使用post_jump以下方法实现相同的效果:

# c.snippets
global !p
def expand(snip):
    if snip.tabstop != 1:
        return
    vim.eval('feedkeys("\<C-R>=UltiSnips#ExpandSnippet()\<CR>")')
endglobal

snippet incstdlib "#include <stdlib.h>" !b
#include <stdlib.h> /* exit(), malloc(), free() */
$0
endsnippet

post_jump "expand(snip)"
snippet incexit "#include <stdlib.h>" !b
incstdlib$1
endsnippet

在此摘要文件中,触发器incexit是trigger 的“别名” incstdlib。实际上incexit,当UltiSnips移至制表位时会扩展到incstdlib和。在刚刚执行的Vimscript功能将扩展到它的最终扩展形式。expand(snip)$1expand(snip)UltiSnips#ExpandSnippetincstdlib#include <stdlib.h>

另一个选择是改为使用UltiSnips正则表达式支持:

snippet "inc(true|false|bool)" "#include <stdbool.h>" r
#include <stdbool.h> /* true, false */
endsnippet

在这里,您将具有三个触发器inctrueincfalse并且incbool实际上是相同的。唯一的缺点是,像YouCompleteMe这样的自动完成插件不会自动完成这些插件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.