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 语法
使用 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
参考
- UltiSnips 让 Vim 飞起来 - 吕小荣
- ultisnips/UltiSnips.txt at master · SirVer/ultisnips
- vim-snipmate/SnipMate.txt at master · garbas/vim-snipmate
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式