VIM Snippets

文章目录

    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

    参考

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式