VIM Snippets

更新日期: 2016-05-17 阅读次数: 10984 分类: Vim

snippet - n.(尤指讲话或文字的)小片,片段,零星的话

如果让我只保留一个 VIM 插件的话,那么这个插件就是 ultisnips. 有了 ultisnips,可以方便的自己编写新语言的自动补全规则,再也不需要在 .vimrc 中搞一坨恶心的 inoremap 规则了。

~~同时推荐,自己 fork 一份 vim-snippets, 按照自己的喜好进行定制, 毕竟写代码需要的是自己的风格,别人的代码终究是别人的代码,看着不舒服。~~

不再推荐 fork 的做法,更科学的方式是自己针对每个新语言,或者新规则,新建一个 snippet git 仓库。这样做的好处是

  • 避免污染公共 vim-snippets 仓库
  • less is more. 越细分的仓库越方便维护和分享

例如,PyPi 的这个 snippets sunzhongwei/vim-pypi-snippets

自动生成代码的神器

例如,在编写 Python 代码的过程中,我输入 def 然后按 TAB 键,自动生成代码块

def function(arg1):
    """TODO: Docstring for function.

    :arg1: TODO
    :returns: TODO

    """
    pass

对于 Backbonejs 这种啰嗦的框架,vim-snippets 的价值就体现出来了。

我整理的 Backbonejs SnipMate 格式的 snippet

vim-snippets 的规则定义

vim-snippets 支持两种格式的规则定义

  • snipMate format: 规则文件位于 /snippets 目录下
  • UltiSnips format: 规则文件位于 /UltiSnips 目录下

snipMate 与 UltiSnips 的对比

snipMate 看上去更简洁一些,UltiSnips 虽然语法恶心,但是支持 Python。

snipMate syntax 语法

snipMate 语法参考

使用 VIM 编写 snipMate 配置文件时,如果需要语法高亮,请安装插件 garbas/vim-snipmate

注意:

特殊符合转义,例如

  • $ 需要写成 $$
  • 需要写成 \, 因为 ` 包围是系统命令

ultisnips 快捷键

let g:UltiSnipsExpandTrigger="<tab>"
" 跳至下个 tab stop
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"

参考 ultisnips/UltiSnips.txt at master · SirVer/ultisnips

使 Mac 系统 VIM 7.4 支持 UltiSnips

安装了 vim-snippets 之后,每次打开 VIM 都会报错,并且 vim-snippets 无法使用

UltiSnips requires py >= 2.7 or any py3

而实际上,我在编译安装 VIM 7.4 时,已经配置了 Python,但是在 VIM 里运行 :py print 'test' 依然显示不支持 Python,说明 configure 的配置还是有问题。

之前的编译参数是

./configure --prefix=/opt/local --with-features=huge --enable-pythoninterp=yes --enable-multibyte --with-vim-name=vim

尝试重新编译

cd vim74
make clean
./configure --prefix=/opt/local --with-features=huge --enable-pythoninterp=yes --enable-multibyte --with-vim-name=vim --with-python-config-dir=/usr/lib/python2.7/config
make
sudo make install

再次打开 VIM, 那个错误不见了, vim-snippets 也可以正常使用了。

注意: Ubuntu 16.04 下,config 参数需要调整为

./configure --prefix=/opt/local --with-features=huge --enable-pythoninterp=yes --enable-multibyte --with-vim-name=vim --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu

checking for tgetent()... configure: error: NOT FOUND!

sudo apt install ncurses-dev

参考

爱评论不评论

近期节日

2018年11月17日 国际大学生节
2018年11月20日 国际儿童日
2018年11月21日 世界问候日
2018年11月22日 小雪
2018年11月22日 感恩节
2018年12月01日 世界艾滋病日
2018年12月03日 国际残疾人日
2018年12月07日 大雪
2018年12月09日 "一二九"运动纪念日
2018年12月09日 世界足球日
2018年12月10日 世界人权日
2018年12月12日 西安事变纪念日
查看更多节日