用VIM打造属于自己的IDE

删除回忆录丶 提交于 2020-01-21 05:45:24
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 ctagssudo apt-get install cscope

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


"configure ctags and cscopeautocmd BufEnter * lcd %:p:hmap <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    endifendfunction

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

4.taglist.vim、winmanage


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

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


"configure tlistlet 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个,设置为1let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vimlet 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 omnicppcompleteset 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>ifunction ClosePair(char)    if getline('.')[col('.') - 1] == a:char        return "<Right>"    else    return a:charendifendf

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

6.Nerd_commenter.vim


官网下载压缩包,解压后会有plugin、doc目录,老规矩放到$HOME/.vim下面。进入doc目录,打开Vim运行":helptags ."。然后在.vimrc下添加:
"configure NERD_commenter.vimlet 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!