vim-snippets使用

2018-03-25  本文已影响745人  coolwind

使用的目的

使用 snippets 类按键的目的主要由以下两点:

使用的效果如下:

2018-03-25_18-10-09.gif
在开发 Django 的过程中,有一些需要重复输入的结构,例如定义数据模型是需要设置字段类型。需要定义 Char 类型的字段需要反复输入 = models.CharField(max_length=30) 这样的结构。于是就定义了 charf 作为缩写。每次需要定义的时候,就输入 charf 然后扩展为所需的结构。如此就可以节省大量的输入以及对默认设置的记忆负担。

大家在在编程的过程中不可避免的需要敲大量的重复的代码结构。而作为程序员,很重要的一个意识,就是要坚持实践 DRY 原则。使用 snippets 类的插件,可以通过自定义代码片段的方式来提高效率。

安装步骤

安装使用Vundle
Plugin 'honza/vim-snippets'
Plugin 'github.com/SirVer/ultisnips'

vim中 :BundleInstall 命令即可完成安装。
相关的资料可以查看官网https://github.com/honza/vim-snippets

如何扩展默认的 Snippets

vim-snippets 默认支持很多中语言的代码片段。默认的代码片段文件放在~/.vim/bundle/vim-snippets/UltiSnips 目录下。如果没有使用Vundle的话,目录会在 ~/.vim/plugin/vim-snippets/UltiSnips 下。根据支持的文件类型不同,文件的名称不同。例如 Python 的配置文件对应的是 Python.snippets 。vim 打开后缀为 py 的文件就是加载 python.snippets 文件中的代码片段。在这个我文件中也可以增加我们的代码片段。但是这样做的话,不方便我们自定义代码片段的保存和同步。换机器或是卸载插件的时候,自定义的的插件就会丢失。

更好的方法是单独新建一个目录,专门保存自定义的代码片段。具体的操作方法是:

  1. 创建一个文件夹 .vim/mysnippets/
  2. .vimrc 文件中指定代码片段搜索文件夹。let g:UltiSnipsSnippetDirectories=["UltiSnips","mysnippets"]
  3. mysnippets 文件夹中创建自己的代码片段文件。

完成了以上三步,只需要将 mysnippets 文件夹备份好,就可以很好的备份和管理自定义的代码片段了。

特别注意

UltiSinps 与 YouCompleteMe Tab 键冲突问题

如果使用了 YouCompleteMe 插件的话,就会因为 Tab 键被 YMC 插件占用而导致代码片段展开的快捷键失效。因为,UltiSinps 也定义了使用 Tab 来完成代码展开的功能。尝试了找到的各种方法,大部分方法建议取消 YMC 对 Tab 键的占用。但是,我还是想让 YCM 继续是用 Tab 键。(毕竟自动补全的使用场景,比代码片段的要多。)所以,一直没有配置成功。最终找到了一个可以解决这个问题的方式。引入一个新的插件 supertab 就能够让 YCM 和 UltiSinps 和平相处,共同发挥作用了。

具体的使用方法:

将插件添加到 .vimrc 文件中。Bundle 'ervandew/supertab' 然后使用 :BundleInstall 命令进行安装。
安装完成之后,增加以下配置内容到 .vimrc文件中

" make YCM compatible with UltiSnips (using supertab)
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'
 
" better key bindings for UltiSnipsExpandTrigger
let g:UltiSnipsExpandTrigger="<c-e>"
let g:UltiSnipsJumpForwardTrigger="<c-j>"
let g:UltiSnipsJumpBackwardTrigger="<c-k>"

这里要特别注意,在 supertab 插件官方给出的配置中 UltiSnipsExpandTrigger 推荐的配置是 "<cr>" 即回车键。但是如果采用了这个配置,就是导致编辑模式下,回车不能够换行了。所以,这里把配置替换成了<c-e>。

上一篇下一篇

猜你喜欢

热点阅读