使用的目的
使用 snippets 类按键的目的主要由以下两点:
- 减少按键次数
- 减轻记忆负担
使用的效果如下:
在开发 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
文件中的代码片段。在这个我文件中也可以增加我们的代码片段。但是这样做的话,不方便我们自定义代码片段的保存和同步。换机器或是卸载插件的时候,自定义的的插件就会丢失。
更好的方法是单独新建一个目录,专门保存自定义的代码片段。具体的操作方法是:
- 创建一个文件夹 .vim/mysnippets/
- 在
.vimrc
文件中指定代码片段搜索文件夹。let g:UltiSnipsSnippetDirectories=["UltiSnips","mysnippets"]
- 在
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>。
网友评论