打造一个有感觉的Vim(三)
这一章介绍VIM的另外两个插件,SnipMate和ZenCoding
SnipMate
下载地址如下:
http://www.vim.org/scripts/script.php?script_id=2540
这个插件的中文意思是片段伴侣(原谅我没什么文采的直译),就是可以用一个Tab键来将某个关键字展开成代码片段,其实和VIM的abbreviate的功能差不多,不过这个插件的好处在于可以在不同的文件中将同一个关键字展开成不同的片段,还可以在展开后片段代码中通过tab键在参数中跳跃。
实例如下:
这里我打开了一个JS文件,SnipMate将使用javascript.snippets里的内容进行片段完成
for<TAB>
case<TAB>
do<TAB>
ai<TAB>
使用这个插件的时候你可以自己定义片段完成,把语句加在对应文件的.snippets中即可
例如上面的实例我在javascript.Snippets中加入了如下语句,
# iijimaai snippet ai alert("iijimaai");
而for完成代码如下
snippet for for (var ${2:i} = 0; $2 < ${1:Things}.length; $2${3:++}) { ${4:$1[$2]} };
其中加$的前缀表明这是参数占位,{[number]:paramName},[number]里的值表明参数的切换顺序
这个插件会和我之前提到的NeoComplCache冲突,修改一下SnipMate.VIM中的代码就好了
if pumvisible() " Update snippet if completion is used, or deal with supertab if exists('g:neocomplcache_enable_at_startup') if g:neocomplcache_enable_at_startup==1 let SuperTabKey = "\<c-n>" call feedkeys(SuperTabKey) | return '' endif endif call feedkeys("\<esc>a", 'n') " Close completion menu call feedkeys("\<tab>") | return '' endif
这一段原来是为了兼容SuperTab这个插件,我把它改成对neoCompl的兼容。
完成后重启VIM,这样在有匹配框时可以通过TAB在候选项间切换,没有匹配框时用TAB来完成代码片段。如果fun刚好是可以匹配的关键字,而此时你又想通过TAB键来进行片段完成那你需要先关闭匹配弹出框,于是我在_virmc中加了一句来用<C-c>关闭匹配弹框
inoremap <expr><C-c> neocomplcache#close_popup()
ZenCoding
接下来是ZenCoding,这个插件在很多编辑器里都有,下载地址如下
https://github.com/mattn/zencoding-vim
中文意思是禅意扣鼎,当一个东西与禅意挂钩时那表示洗脑就要开始了。
这个插件是用于完成html的各种标签,重点在于你要熟悉CSS选择器,这样的话几乎不用去死记硬背各种完成模式,因为那些都是和CSS选择器挂钩的。类似于通过zencoding这个插件来将你的代码通过CSS的方式解读完成。基本用法就是输入标签之后按下<C-y,>,我在_vimrc里添加了如下这句
"设定ZenCoding的展开标签快捷键 let g:user_zen_expandabbr_key = '<C-j>'
可以用<C-j>来展开html标签
废话不多说,看如下例子:
看到这么性感的插件,我真的为自己不是前端程序猿而遗憾~~