请教一个 Vim 的 UltiSnips 插件问题

2015-10-29 10:59:12 +08:00
 cxh116

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

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

<tr>td</tr> #在 td 后面按 tab 可以补全
<tr>right</tr> #在 right 后面按 tab 不可以补全
<tr> right</tr> #在 right 前面加一个空格,之后再在 right 后 按 tab 可以补全.
2210 次点击
所在节点    Vim
3 条回复
yangyanggnu
2015-10-29 12:51:39 +08:00
在定义结对符模板时,你应该考虑加上模板控制参数 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
2015-10-29 12:54:26 +08:00
换一个快捷键?我默认都是用 CTRL 加 j ,来触发的。
cxh116
2015-10-29 14:11:00 +08:00
@yangyanggnu 谢谢,加了 i 选项可以用了,用的是 https://github.com/honza/vim-snippets ,eruby 某些地方不在 i 选项太不好用了.


@tracyone 已经是 ctrl+j 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/231928

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX