您的位置:首页 > 其它

把VIM打造成一个真正的IDE

2013-01-07 21:14 337 查看
这里所说的IDE主要是指C/C++开发,但是由于笔者之前也搞java和c#开发,所以对这两种语言也会有所兼顾。
这个话题可能要分好几篇文章来写了,今天主要讲一下最简单的,包括vimrc里面的基本配置,让vim能够完美支持各种源码文件;
vimrc配置如下(为简单起见,采取注释的方式直接说明):
12 3 4 5 67 8 9 10 1112 13 14 15 16 17 18 19 20 2122 23 24 25 26 27 28 29 30 3132 33 34 35 36 37
if(has("win32") || has("win95") || has("win64") || has("win16")) "判定当前操作系统类型     let g:iswindows=1else     let g:iswindows=0 endif set nocompatible "不要vim模仿vi模式,建议设置,否则会有很多不兼容的问题 syntax on"打开高亮 if has("autocmd")     filetype plugin indent on "根据文件进行缩进     augroup vimrcEx         au!         autocmd FileType text setlocal textwidth=78         autocmd BufReadPost *                     \ if line("'\"") > 1&& line("'\"") <= line("$") |                     \ exe "normal! g`\"" |                     \ endif     augroup END else     "智能缩进,相应的有cindent,官方说autoindent可以支持各种文件的缩进,但是效果会比只支持C/C++的cindent效果会差一点,但笔者并没有看出来     set autoindent " always set autoindenting on  endif " has("autocmd") set tabstop=4 "让一个tab等于4个空格 set vb t_vb= set nowrap "不自动换行 set hlsearch "高亮显示结果 set incsearch "在输入要搜索的文字时,vim会实时匹配 set backspace=indent,eol,start whichwrap+=<,>,[,] "允许退格键的使用 if(g:iswindows==1) "允许鼠标的使用     "防止linux终端下无法拷贝     if has('mouse')         set mouse=a     endif     au GUIEnter * simalt ~x endif "字体的设置 set guifont=Bitstream_Vera_Sans_Mono:h9:cANSI "记住空格用下划线代替哦 set gfw=幼圆:h10:cGB2312
OK,有了上面的基本设置,一个好用的vim就配置好了,但是如果想让它完美支持各种源代码文件,想让它方便的注释,方便的进行代码提示,方便的添加用户信息,那还差的很远哦,就请期待下一篇吧-----把VIM打造成一个真正的IDE(2)

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 实现了源代码结构和函数列表的展示,功能非常强大
2)有了tags就自动支持了
3)omnicppcomplete.vim 实现写C/C++语言时自动补全
4)NERD_commenter.vim 注释插件
5)DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释
6)这段配置是本人自己写的稍后贴出。
7)a.vim 实现.cpp和.h快速切换
下面一个个的讲解配置:
注意,请先检查是否有如下配置,如果没有请添加:
12 3 4 5 6
if(has("win32") || has("win95") || has("win64") || has("win16"))     let g:vimrc_iswindows=1else     let g:vimrc_iswindows=0 endif autocmd BufEnter * lcd %:p:h
首先确认安装了ctags和cscope,并且确认这两个可执行程序所在的目录已经放进环境变量里面。(必须做,否则后边都无法操作)
在vimrc中配置如下:
12 3 4 5 67 8 9 10 1112 13 14 15 16 17 18 19 20 2122 23 24 25 26 27 28 29 30 3132 33 34 35 36 3738 39 40 4142 43 44 45 46 47 48 49 50 5152 53 54 55 56 57 58 59 60 6162 63 64 
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     endif endfunction
1)taglist.vim
先截个图给大家看下:



把taglist.vim放在plugin目录下后,在vimrc中添加如下的配置:
12 3 4 5 67 8 9 10 
"进行Tlist的设置 "TlistUpdate可以更新tags map <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 let Tlist_Process_File_Always=0 "是否一直处理tags.1:处理;0:不处理。不是一直实时更新tags,因为没有必要 let Tlist_Inc_Winwidth=0
2)已经在上面解释过,所以这里不再做赘述
OK,到这里,我们已经能够成功的显示函数列表和查看函数定义了,阅读代码已经没有问题了,剩下的就是要在写代码过程中用到的插件啦,我们在把VIM打造成一个真正的IDE(3)中继续~

我们之前已经让在VIM下看代码变得方便与简单,现在我们来让用Vim写代码也一样方便~看完本篇之后,你就可以完全抛弃sourceinsight之类的工具啦~
3)omnicppcomplete.vim 实现写C/C++语言时自动补全 下载插件
惯例,先截图:



其实使用很简单,下载 omnicppcomplete
然后按照说明将插件安装到vimfiles下面,目录结构如下:
after\ftplugin\cpp.vim     after\ftplugin\c.vim       autoload\omni\common\debug.vim                         \utils.vim       autoload\omni\cpp\complete.vim                      \includes.vim                      \items.vim                      \maycomplete.vim                      \namespaces.vim                      \settings.vim                      \tokenizer.vim                      \utils.vim       doc\omnicppcomplete.txt
然后需要生成tags,哈哈,记得我们之前用F12映射的命令吧(把Vim打造成真正的IDE(2)),按下F12然后去享受吧~~
顺便说一下:omnicppcomplete会打开一个预览窗口来提示变量定义,如果不想要看到详细的信息的话,在vimrc中这样配置:
1
set completeopt=menu
4)NERD_commenter.vim 注释插件 下载插件
也是程序员非常实用的一款插件,支持各种语言的补全,只要你能想到的,放心他绝对注释的了,而且还支持单行注释,批量注释,等各种命令映射,在这里,我把最常用的键映射在vimrc中配置了一下。
12 
"对NERD_commenter的设置 let NERDShutUp=1
这样的话,在光标所在行上,按下一次ctrl+h是注释,再按下一次是取消注释。
而其内建的指令,cm是多行注释,类似C++的/**/,,cu是取消注释。
5)DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释 下载地址
这个插件使得vim能够生成标准的函数注释,如图:



12 3 4 5 67 8 9 
map fg : Dox<cr> let g:DoxygenToolkit_authorName="dantezhu" let g:DoxygenToolkit_licenseTag="My own license\<enter>" let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK" let g:DoxygenToolkit_briefTag_pre = "@brief\t" let g:DoxygenToolkit_paramTag_pre = "@param\t" let g:DoxygenToolkit_returnTag = "@return\t" let g:DoxygenToolkit_briefTag_funcName = "no" let g:DoxygenToolkit_maxFunctionProtoLines = 30
读者可以需要将 DoxygenToolkit_authorName设置成为自己的名字,OK,这样标准格式的代码注释就出来啦。
5)a.vim .cpp和.h文件快速切换 下载地址
把下载的a.vim放到plugin下,不需要配置。
直接可以:A,打开.cpp和.h对应的文件,:AV,打开.cpp和.h对应的文件,并且分屏,截图如下:



OK,如果你按照我的说明将vim配置了下来,那么你的vim应该已经是一个超级强悍的IDE啦,快去写写代码试试吧,是不是和之前很是不同了啊,哈哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: