這裏所說的IDE主要是指C/C++開發,但是由於筆者之前也搞java和c#開發,所以對這兩種語言也會有所兼顧。
這個話題可能要分好幾篇文章來寫了,今天主要講一下最簡單的,包括vimrc裏面的基本配置,讓vim能夠完美支持各種源碼文件;
vimrc配置如下(爲簡單起見,採取註釋的方式直接說明):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
if(has("win32") || has("win95") || has("win64") || has("win16")) "判定當前操作系統類型 let g:iswindows=1 else 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就配置好了,但是如果想讓它完美支持各種源代碼文件,想讓它方便的註釋,方便的進行代碼提示,方便的添加用戶信息,那還差的很遠哦,就請期待下一篇吧
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中配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 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中添加如下的配置:
1 2 3 4 5 6 7 8 9 10 11 |
"進行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個,設置爲1 let 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
截圖如下:
這個插件實現了按下fd,就可以提示當前光標所在函數的定義,另外還實現了當輸入'('時,會自動匹配tags,展示函數的定義原型。
只需要把這個插件放到plugin下就行,不需要配置。
2)已經在上面解釋過,所以這裏不再做贅述
OK,到這裏,我們已經能夠成功的顯示函數列表和查看函數定義了,閱讀代碼已經沒有問題了,剩下的就是要在寫代碼過程中用到的插件啦,我們在把VIM打造成一個真正的IDE(3)中繼續~
好了,接着前面的兩篇,我們今天來寫《把VIM打造成一個真正的IDE》系列的終結篇。
我們之前已經讓在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中配置了一下。
1 2 3 4 |
"對NERD_commenter的設置 let NERDShutUp=1 "支持單行和多行的選擇,//格式 map <c-h> ,c<space> |
這樣的話,在光標所在行上,按下一次ctrl+h是註釋,再按下一次是取消註釋。
而其內建的指令,cm是多行註釋,類似C++的/**/,,cu是取消註釋。
5)DoxygenToolkit.vim 由註釋生成文檔,並且能夠快速生成函數標準註釋 下載地址
這個插件使得vim能夠生成標準的函數註釋,如圖:
1 2 3 4 5 6 7 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啦,快去寫寫代碼試試吧,是不是和之前很是不同了啊,哈哈。