Vim 自定义补全利器 Snippet
Vim Snippet 设置
本人是 vim 用户,可以说能不用 IDE 就不用 IDE。
Snippet 是一种支持用户自定义补全的需求,在 vim 中,可以使用 UltiSnips
和 Vim-Snippets
两个插件进行补全。UltiSnips
类似于一个替换引擎,本身是没有任何补全规则的,而 Vim-Snippets
则提供了各种各样的 snippets。
具体效果如下
安装方法很简单,在 ~/.vimrc
中加入
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
安装好之后,默认展开是 <tab>
,我们还可以使用let g:UltiSnipsExpandTrigger = key
来定义自己想要展开的键。
一些常用的展开:
incc => #include<iostream>
inc => #include<stdio.h>
cout => cout << ... << endl
UltiSnips
同时还支持我们自定义代码块补全,方法也很简单。
Step1:
在 ~/.vim/
下创建一个文件夹为 UltiSnips
用来存放我们自定义的补全,创建一个文件名为 语言.snippets
的文件,这个语言即会在某个具体的语言生效。比如,需要创建一个用来补全 C 语言的文件,那文件名就是 c.snippets
,创建一个用来补全 Cpp 的文件,那文件名就是 cpp.snippets
Step2:
语法规则:每一个展开规则都类似于如下的样式。
snippet 缩写 “描述” 设定
展开后的代码
endsnippet
例如,如果我想对 #define 进行缩写,想要达到的效果是输入def,即可自动展开。那么,应该如下编写
snippet def "define" b
#define
endsnippet
设定的选项有介绍以下几种:
b
这个关键词只有出现在行首的时候,才能被展开。A
代表自动展开i
表示可以护绿前后的字节,直接展开关键词。
查看更多的选项设置可以在 ultisnip
文档查看。
Step3
我们还可以设定一些,自动跳转和同步显示的高级玩法。
snippet for "for loop" b
for (int ${1:i} = $2; $1 < $3; $1++){
$4
}
endsnippet
这里面$1
, $2
, $3
代表了不同的变量,按照变量顺序,我们可以实现在变量之间的自动跳转。
<c-j>
向后跳转, <c-k>
向前跳转。