我已经制作了一个片段,希望提供不同的触发条件,所以除了说trigger之外,我还想用myothertrigger触发它:

编辑:要清楚,我正在使用UltiSnips,但如果有更好的插件,我可能会研究一下。

评论

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

该问题被标记为plugin-ultisnips,所以我认为OP正在使用ultisnips。

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

#1 楼

目前,UltiSnips中尚无此方法。不过,在Github上有一个开放的功能请求。就我个人而言,我也希望为触发器使用别名功能,如此处所示。

#2 楼

尽管没有别名的特定语法,但您可以通过使用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() */
snippet "inc(true|false|bool)" "#include <stdbool.h>" r
#include <stdbool.h> /* true, false */
endsnippet
endsnippet post_jump "expand(snip)" snippet incexit "#include <stdlib.h>" !b incstdlib endsnippet


在此摘要文件中,触发器incexit是触发器incstdlib的“别名” 。实际上,当UltiSnips移至制表位incexit时,incstdlib会扩展为expand(snip)并会调用expand(snip)只需执行VimScript函数UltiSnips#ExpandSnippet即可将incstdlib扩展为其最终扩展形式#include <stdlib.h>

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

q4312078q

这里您将拥有三个有效的触发器inctrueincfalseincbool相同。唯一的缺点是像YouCompleteMe这样的自动完成插件不会自动完成这些插件。