VIM的功能强大并不仅仅表现在支持很多快捷方式上,还有很多各种各样的插件,帮助你实现各种功能,方便你编码。这些插件还都是免费开放的,需要的人可以方便的下载到。
1. Ctags
Ctags可以扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来(在目录下生成tags文件)。
因为VIM本身没有工程的概念,编辑中全靠程序员自己对代码所处位置的熟悉,跨文件的跳转就没那么容易了。这点对于项目刚接触时还是比较让人头疼的,所以Ctags这个插件很好的解决了这个问题。尽管Ctags也可以支持其它编辑器,但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags。
Ctags可以直接使用apt-get来下载,也可以自行下载:http://sourceforge.net/projects/ctags/files/
熟练的使用Ctags仅需记住下面七条命令:(很简单吧,呵呵)
● ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
-R:ctags循环生成子目录的tags--c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明
--fields=+iaS :ctags要求描述的信息,其中i表示如果有继承,则标识出父类;a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);S表示如果是函数,则标识函数的signature。
--extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags对同一个语法元素再记一行,这样可以保证在VIM中多个同名函数可以通过路径不同来区分。
这条命令会在当前目录下产生一个“tags”文件,当用户在当前目录中运行vi时,会自动载入此tags文件。
● $ vi –t tag (请把tag替换为您欲查找的变量或函数名),例如:
$ vim -t main
这个命令将打开定义“main”ct(变量或函数或其它)的文件,并把光标定位到这一行。
● :ts (ts 助记字:tags list, “:”开头的命令为VI中命令行模式命令),如果这个变量或函数有多处定义,在VI命令行模式“:ts”命令就能列出一个列表供用户选择。
● :tp (tp 助记字:tags preview)---?此命令不常用,可以不用记
● :tn (tn 助记字:tags next) ---?此命令不常用,可以不用记
“:tp”为上一个tag标记文件,“:tn”为下一个tag标记文件。当然,若当前tags文件中用户所查找的变量或函数名只有一个,“:tp,: tn”命令不可用。
● Ctrl + T,退回原来的地方
注意:运行VIM的时候,必须在“tags”文件所在的目录下运行。否则,运行VIM的时候还要用“:settags=”命令设定“tags”文件的路径,这样VIM才能找到“tags”文件。在完成编码时,可以手工删掉tags文件(帚把不到,灰尘不会自己跑掉^_^)。
可以在vimrc文件中增加这么一句,这样,按F12就可以直接生成tags文件了。
nmap <F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
需要指出的是,这里的<CR>是需要录入的一部分,并非是一个回车。
2. taglist
taglist也是VIM下常见的一个插件,这个插件可以把当前文件中的宏、全局变量、函数等tag显示在一个独立的窗口,编码时可以非常方便的帮你掌握文件的内容。
要使用taglist plugin,必须满足:
● 打开vim的文件类型自动检测功能
● 系统中装了Exuberant ctags工具,并且taglist plugin能够找到此工具(因为taglist需要调用它来生成tag文件)
● 你的vim支持system()调用
taglist并非用apt-get来获得,而是可以下载到,下载地址:http://www.vim.org/scripts/script.php?script_id=273
下载后,把该文件在~/.vim/目录中解压缩,这会在你的~/.vim/plugin和~/.vim/doc目录中各放入一个文件
plugin/taglist.vim – taglist插件
doc/taglist.txt - taglist帮助文件
为了方便的获得帮助,用命令行加入帮助文档,然后就可以方便的使用:help taglist.txt来获得帮助了
:helptags ~/.vim/doc
:TlistOpen —— 打开tag窗口
:TlistClose —— 关闭tag窗口
:TlistToggle —— 在打开/关闭之间切换tag窗口
使用下行的命令可以使用<F8>作为快捷键来打开/关闭tag窗口,同样这里的<CR>是需要录入的一部分,并非是一个回车。
nnoremap <silent> <F8> :TlistToggle<CR>
let Tlist_Ctags_Cmd='ctags' " 因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=1 " 让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=0 "让taglist 可以同时展示多个文件的函数列表,如果想只有1个,设置为1
let Tlist_File_Fold_Auto_Close=1 " 非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 " 当taglist是最后一个分割窗口时,自动推出vim
let Tlist_Process_File_Always=0 " 是否一直处理tags.1:处理;0:不处理。不是一直实时更新tags,因为没有必要
let Tlist_Inc_Winwidth=0
在我的vimrc文件中,这一段内容如下:
nnoremap <silent> <F8> :TlistToggle<CR>
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
let Tlist_File_Fold_Auto_Close=1
3. OmniCppComplete
omnicppcomplete,Vim中C/C++代码补全插件,基于ctags所生成的标签库。
同样无法用apt-get来获得,下载地址:http://www.vim.org/scripts/script.php?script_id=1520
目前最新版本是0.41
安装就是将下载的包解压到~/.vim目录下,压缩包里面包含三个个目录after和autoload,doc。需要提一下的是文档中说after和autoload目录放在~/.vim目录下即可,我实际使用发现必须在~/.vim/plugin目录下也保持一份才行,也就是需要2份,估计是和我使用的软件版本有关。
:helptags ~/.vim/doc 就是导入帮助文件。
插件这就算安装完了。然后再到vim配置文件中加入如下的配置:
"-- omnicppcomplete setting --set completeopt=menu,menuone
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1
let OmniCpp_DisplayMode=1
4. winmanager
VIM自带的netrw.vim插件可以在窗口中显示当前目录中的文件并能选择打开,这个功能非常体贴,不过这个窗口看上去比较难看,不象现在的IDE一样简洁明了。
所以。。。winmanager这个插件就是用来管理文件显示/tag显示/主窗口的,让各个窗口各安其位。
下载地址:http://www.vim.org/scripts/script.php?script_id=95下载后在~/.vim中解压
plugin/winfileexplore.vim
winmanager.vim - winmanager插件
wintagexplore.vim
doc/winmanager.txt - winmanager帮助文件
为了方便的获得帮助,用命令行加入帮助文档
:helptags ~/.vim/doc
然后在rc文件中加入:
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap <F4> :WMToggle<CR>
nmap <C-w><C-f> :FirstExplorerWindow<CR>
nmap <C-w><C-b> :BottomExplorerWindow<CR>
这样设置后,用F4可以方便的控制winmanager的开关
在安装了这几个插件后,你的VIM的功能已经大大被增强了,拥有了函数跳转,代码补全,tag列表,目录显示等功能,有点类似IDE的样子了,一般的编辑任务已经可以蛮不错的完成了。当然,插件成千上万,其他还有很多很有用的插件,可以实现注释,代码对齐等等功能,各有巧妙不同,这个就需要在日常使用中自己逐步完善了。