vim-snippets使用

使用的目的

使用 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>。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容