用VIM打造属于自己的IDE

Vim是一个强大的文本编辑器,我参考网上教程定制了一个简单的IDE,具有文件视图、自动补全、批量注释等常用功能。先上图:



要完成整个配置,需要安装ctags、cscope软件,以及taglist.vim、winmanage、omnicppcomplete.vim、NERDcommenter.vim、a.vim、DoxygenToolKit插件。

  • ctags软件可以帮助我们跳转到函数或者变量的定义位置;
  • cscope软件比ctags更强大,可以找到哪些位置调用了某个函数;
  • taglist.vim和winmanage插件用于显示源代码的结构,比如函数列表;
  • omnicppcomplete.vim插件可以实现C/CPP代码的补全;
  • NERD_commenter.vim可以实现批量注释;
  • a.vim实现.cpp和.h的快速切换,比如敲代码时想立刻查看头文件;
  • DoxygenToolKit插件用于自动产生注释。

有了这些基本功能,Vim俨然成了一个简化版的SourceInsight。


1. 配置.vimrc


.vimrc是Vim的配置文件,就在$HOME目录下面,如果没有就自己创建一个。在这个文件里可以深度定制Vim。不要太复杂,先配上最基本的,代码如下:


  set nocompatible "不要兼容vi
syntax on "高亮
set tabstop=4 "tab等于4空格
set hlsearch "搜索高亮
set incsearch "搜索实时更新
set cindent "自动缩进
set nu "显示行号
filetype plugin on "a.vim插件需要这个

2.如何安装插件


Vim安装插件离奇地简单,在$HOME目录下建一个.vim目录,以后的插件都往这里放。

3.ctags和cscope


ubuntu的用户直接使用

sudo apt-get install ctags
sudo apt-get install cscope

然后为更方便使用ctags和cscope,我们需要配置一下.vimrc。


"configure ctags and cscope
autocmd BufEnter * lcd %:p:h
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")
let tagsdeleted=delete("./"."tags")
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")
let csfilesdeleted=delete("./"."cscope.files")
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")
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") )
silent! execute "!find `pwd .` -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
silent! execute "!cscope -b"
execute "normal :"
if filereadable("cscope.out")
execute "cs add cscope.out"
endif
endif
endfunction

这里最重要的就是将F12映射为Do_CsTag函数,当文件被修改了,只需要按一次F12就会更新tags和cscope.out。

4.taglist.vim、winmanage


下载taglist.vim、winmanage,解压缩后,会得到两个子目录:plugin、doc。将这两个目录移动到$HOME/.vim目录下,然后进入doc目录,打开Vim运行":helptags ."(这条命令会用到很多次,也可以把所有插件安装完成后,一次性运行)。

然后我们需要为.vimrc添加:


"configure tlist
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap <F3>:WMToggle<CR>
let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=0 "让窗口显示在右边,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

以后只需要按F3就可以打开/关闭代码结构视图。

5.omnicppcomplete.vim


主页下载压缩包,压缩后会得到after、autoload、doc三个目录,移动到$HOME/.vim目录下。同样要进入doc目录,打开Vim运行":helptags ."。
然后需要在.vimrc添加:

"configure omnicppcomplete
set completeopt=menu
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i

function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "<Right>"
else
return a:char
endif
endf

输入->和.会自动弹出结构体成员的下拉列表。如果想补全局部变量可以配合使用ctrl+N和+P。

6.Nerd_commenter.vim


官网下载压缩包,解压后会有plugin、doc目录,老规矩放到$HOME/.vim下面。进入doc目录,打开Vim运行":helptags ."。然后在.vimrc下添加:
"configure NERD_commenter.vim
let mapleader=","

这样只需按下“,+c+空格”就能注释本行,或者先输入数字N,再按“,+c+空格”就能注释N行。

7.a.vim


官网下载,得到a.vim文件,直接放到$HOME/.vim/plugin目录,无需任何配置。打开一个.c文件,运行命令“:A”就能立刻切换到对应的.h文件;运行“:AV”就能分屏显示.c和.h文件。

8.DoxygenToolKit


下载。使用Dox、DoxAuthor、DoxLic命令,可以在光标位置分别创建函数注释、作者注释、licence注释。注释的内容是可配置的,如:
let g:DoxygenToolkit_briefTag_pre="@Synopsis  " 
let g:DoxygenToolkit_paramTag_pre="@Param "
let g:DoxygenToolkit_returnTag="@Returns "
let g:DoxygenToolkit_blockHeader="--------------------------------------------------------------------------"
let g:DoxygenToolkit_blockFooter="----------------------------------------------------------------------------"
let g:DoxygenToolkit_authorName="Mathias Lorente"
let g:DoxygenToolkit_licenseTag="My own license"

 

9.参考资料
[1] 把VIM打造成一个真正的IDE(1)
[2] 把VIM打造成一个真正的IDE(2)
[3] 把VIM打造成一个真正的IDE(3).
[4] Vim的快速注释插件NerdCommenter

posted on 2013-09-10 16:21  OpenNaive  阅读(562)  评论(0编辑  收藏  举报

导航