VIM Snippets

更新日期: 2023-04-27 阅读次数: 26661 字数: 664 分类: 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: 规则文件位于 vim-snippets/snippets 目录下
  • UltiSnips format: 规则文件位于 vim-snippets/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

为了方便记忆,换成 tab:

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"

使 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

参考

tags: VIM 自动补全 ultisnips

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式