把VIM打造成一个真正的IDE(2)

来源:互联网 发布:上海电信it研发中心 编辑:程序博客网 时间:2024/05/17 05:52

OK,上一篇文章,我们已经配置好了一个可以正常使用的VIM,那么在我们真正来到程序员的VIM世界之前,希望你能在VIM里面再多加下面几个配置。

set go= "无菜单、工具栏"

对,让我真正抛弃鼠标,进入美妙的VIM之旅吧!

首先说说一个IDE应该有的几个功能:

1)源代码结构及函数列表

2)变量定义支持跳转等

3)代码自动补全

当然VIM还给了我们几个小惊喜:

4)快速批量注释与反注释

5)由注释直接生成文档

6)文件头作者信息自动添加

7).cpp和.h文件之间的快速切换

那么接下来,我们久来看看我们将会用到的插件列表。

首先介绍一下一些必备知识,我们需要下面两样东西,来辅助完成vim成为IDE的大业--ctags和cscope,这两样东西不是vim的插件而是可执行程序,linux和windows下都有。ctags主要实现了c、c++、java、c#等语言的智能分析,并声称tags文件,后面所有的包括函数列表显示,变量定义跳转,自动补全等,都要依赖于他。有了tags文件后,只需要在变量上按下 CTRL + ]键,就可以自动跳到变量定义的位置。而cscope据说诞生就是为了来替代ctags的,因为他有着比ctags更加强大的功能,举个例子,ctags只能分析出这个函数在哪里被定义,而cscope除了这一点之外,还能分析出这个函数再哪里被调用。当然cscope目前还是有不少bug的,但是也不影响我们的使用。

1)taglist.vim 实现了源代码结构和函数列表的展示,功能非常强大

showfunc.vim 一个展示C/C++/java/C#函数原型的插件,原本是echofunc.vim但是不支持java,c#,所以我把他改了。下载showfunc.vim

2)有了tags就自动支持了

3)omnicppcomplete.vim 实现写C/C++语言时自动补全

4)NERD_commenter.vim 注释插件

5)DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释

6)这段配置是本人自己写的稍后贴出。

7)a.vim 实现.cpp和.h快速切换

下面一个个的讲解配置:

首先确认安装了ctags和cscope,并且确认这两个可执行程序所在的目录已经放进环境变量里面。(必须做,否则后边都无法操作)

在vimrc中配置如下:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
map <F12> :call Do_CsTag()<CR>nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>function Do_CsTag()    let dir = getcwd()    if filereadable("tags")        if(g:iswindows==1)            let tagsdeleted=delete(dir."//"."tags")        else            let tagsdeleted=delete("./"."tags")        endif        if(tagsdeleted!=0)            echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None            return        endif    endif    if has("cscope")        silent! execute "cs kill -1"    endif    if filereadable("cscope.files")        if(g:iswindows==1)            let csfilesdeleted=delete(dir."//"."cscope.files")        else            let csfilesdeleted=delete("./"."cscope.files")        endif        if(csfilesdeleted!=0)            echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None            return        endif    endif    if filereadable("cscope.out")        if(g:iswindows==1)            let csoutdeleted=delete(dir."//"."cscope.out")        else            let csoutdeleted=delete("./"."cscope.out")        endif        if(csoutdeleted!=0)            echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None            return        endif    endif    if(executable('ctags'))        "silent! execute "!ctags -R --c-types=+p --fields=+S *"        silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."    endif    if(executable('cscope') && has("cscope") )        if(g:iswindows!=1)            silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"        else            silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"        endif        silent! execute "!cscope -b"        execute "normal :"        if filereadable("cscope.out")            execute "cs add cscope.out"        endif    endifendfunction

1)taglist.vim

先截个图给大家看下:

taglist

把taglist.vim放在plugin目录下后,在vimrc中添加如下的配置:

1234567891011
"进行Tlist的设置"TlistUpdate可以更新tagsmap <F3> :silent! Tlist<CR> "按下F3就可以呼出了let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边let Tlist_Show_One_File=0 "taglist可以同时展示多个文件的函数列表,如果想只有1个,设置为1let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏let Tlist_Exit_OnlyWindow=1 "taglist是最后一个分割窗口时,自动推出vim"是否一直处理tags.1:处理;0:不处理let Tlist_Process_File_Always=0 "不是一直实时更新tags,因为没有必要let Tlist_Inc_Winwidth=0

showfunc.vim    下载showfunc.vim

截图如下:

showfunc

这个插件实现了按下fd,就可以提示当前光标所在函数的定义,另外还实现了当输入'('时,会自动匹配tags,展示函数的定义原型。

只需要把这个插件放到plugin下就行,不需要配置。

2)已经在上面解释过,所以这里不再做赘述

OK,到这里,我们已经能够成功的显示函数列表和查看函数定义了,阅读代码已经没有问题了,剩下的就是要在写代码过程中用到的插件啦,我们在把VIM打造成一个真正的IDE(3)中继续~

 

转载自Vimer的程序世界 [ http://www.vimer.cn ]

原文链接地址: http://www.vimer.cn/2009/10/%e6%8a%8avim%e6%89%93%e9%80%a0%e6%88%90%e4%b8%80%e4%b8%aa%e7%9c%9f%e6%ad%a3%e7%9a%84ide2.html