cxh116
0.45D
V2EX  ›  Vim

请教一个 Vim 的 UltiSnips 插件问题

  •  
  •   cxh116 · Oct 29, 2015 · 2871 views
    This topic created in 3915 days ago, the information mentioned may be changed or developed.

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

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

    <tr>td</tr> #在 td 后面按 tab 可以补全
    <tr>right</tr> #在 right 后面按 tab 不可以补全
    <tr> right</tr> #在 right 前面加一个空格,之后再在 right 后 按 tab 可以补全.
    
    3 replies    2015-10-29 14:11:00 +08:00
    yangyanggnu
        1
    yangyanggnu  
       Oct 29, 2015   ❤️ 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  
       Oct 29, 2015 via Android
    换一个快捷键?我默认都是用 CTRL 加 j ,来触发的。
    cxh116
        3
    cxh116  
    OP
       Oct 29, 2015
    @yangyanggnu 谢谢,加了 i 选项可以用了,用的是 https://github.com/honza/vim-snippets ,eruby 某些地方不在 i 选项太不好用了.


    @tracyone 已经是 ctrl+j 了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3033 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 00:04 · PVG 08:04 · LAX 17:04 · JFK 20:04
    ♥ Do have faith in what you're doing.