摘要
本文介绍的是号称代码片段终极解决方案的 —— UltiSnips, 这个补全引擎非常快,而且有非常惊艳的表现,需要配合 vim-snippets 一起使用.
简介
UltiSnips 为 Vim
提供了代码片段管理功能, 可以快速将大量冗余、繁琐的代码片段插入到代码中. 其中 UltiSnips 是补全引擎,真正的补全模板在 vim-snippets, 请看下面的 Demo
:
安装
Note: 请确保已经正确安装了 Pathogen
插件,如果没有安装,请参考 Hacking Vim: 插件管理器Pathogen(02)
本篇文章的代码在 https://github.com/NsLib/blog-vim-proj/tree/ultisnips
git clone https://github.com/SirVer/ultisnips --depth=1
git clone git@github.com:honza/vim-snippets.git --depth=1
rm -rf ~/.vim/bundle/ultisnips/.git
rm -rf ~/.vim/bundle/vim-snippets/.git
配置
autocmd FileType * call UltiSnips#FileTypeChanged()
" 连续按下两次i触发代码补全
let g:UltiSnipsExpandTrigger="ii"
自定义代码片段
代码片段维护在 vim-snippets 项目里面,我们切换到 ~/.vim/bundle/vim-snippets/
, 其内容如下:
.
├── UltiSnips
├── autoload
├── plugin
├── pythonx
└── snippets
5 directories
这里我们只需要关注其中的 UltiSnips
和 snippets
这两个文件夹,snippets
这里面是 snipMate
格式的补全代码,不推荐使用,新入坑的同学应该始终选择 UltiSnips
格式,因为其更灵活.
我们来看看 ~/.vim/bundle/vim-snippets/UltiSnips
中的内容:
.
├── README
├── all.snippets
├── bib.snippets
├── bindzone.snippets
├── c.snippets
├── 这里省略一些语言类型
├── vim.snippets
├── xhtml.snippets
├── xml.snippets
└── zsh.snippets
0 directories, 56 files
这个文件夹下使用使用语言类型加 .snippets
来定义对应语言的代码片段,这里以 C语言
为例,我们打开 c.snippets
,以一个实例来简要说明,这里只是最基础的简介,因为规则非常简单,有编程基础的同学参考官方自带的例子可以很容易理解的:
snippet ife "这里是代码片段的描述"
if (${1:/* 默认显示的内容 */}) {
${2:/* stat */}
} else {
${3}
}
${0:/* 占位符0最后才会切换到 */}
endsnippet
下面是一些规则:
- 代码片段以
snippets 代码片段触发的缩写 "代码片段描述"
开始,以endsnippet
结束 ${x}
定义了跳转点,使用<c-j>
和<c-k>
进行切换(请参看我的配置文件)${0}
比较特殊,它实际上是最后一个跳转点,而不是第一个${x:statement}
其中的statement
可以替换成默认显示的文本.
请结合我的演示来理解:
结语
这个插件我用的比较基础,这里只介绍最基础的东西,想深入细节的同学 RTFM
吧, XD