V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cxh116
V2EX  ›  Vim

请教一个 Vim 的 UltiSnips 插件问题

  •  
  •   cxh116 · 2015-10-29 10:59:12 +08:00 · 2309 次点击
    这是一个创建于 3317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    某些情况下,自动展开代码块功能无法触发.

    在一个 a.html 文件里面试验:

    <tr>td</tr> #在 td 后面按 tab 可以补全
    <tr>right</tr> #在 right 后面按 tab 不可以补全
    <tr> right</tr> #在 right 前面加一个空格,之后再在 right 后 按 tab 可以补全.
    
    3 条回复    2015-10-29 14:11:00 +08:00
    yangyanggnu
        1
    yangyanggnu  
       2015-10-29 12:51:39 +08:00   ❤️ 1
    在定义结对符模板时,你应该考虑加上模板控制参数 i 。默认情况下, UltiSnips 只会当模板名前是空白字符或行首时才进行模板补全,比如,定义 () 的模板如下:
    snippet b "bracket"
    (${1})${2}
    endsnippet

    我要调用函数 printf(),在输入完 printf 后应该接着输入括号模板名 b ,然后输入模板展开快捷键 <leader><tab>,你会发现 UltiSnips 无法帮你补全模板,因为它看到的不是 b 而是 printfb ,这在模板文件中根本未定义。有一种间接解决方式是在 printf 后加个空格,再输入 b<leader><tab> 进行补全,这就成了 printf (),不喜欢这种编码风格。其实, UltiSnips 的作者也注意到这个问题了,他让你可以通过前面提过的模板控制参数 i 进行解决。重新定义 () 的模板如下:
    snippet b "bracket" i
    (${1})${2}
    endsnippet

    这样, UltiSnips 只管光标前 1 个字符是否是 b ,若是则补全 (),不论 b 前是否有其他字符。类似,其他结对符模板都按此加上 i 控制参数。
    tracyone
        2
    tracyone  
       2015-10-29 12:54:26 +08:00 via Android
    换一个快捷键?我默认都是用 CTRL 加 j ,来触发的。
    cxh116
        3
    cxh116  
    OP
       2015-10-29 14:11:00 +08:00
    @yangyanggnu 谢谢,加了 i 选项可以用了,用的是 https://github.com/honza/vim-snippets ,eruby 某些地方不在 i 选项太不好用了.


    @tracyone 已经是 ctrl+j 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2742 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 17ms · UTC 15:27 · PVG 23:27 · LAX 07:27 · JFK 10:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.