這篇文章還是承接了上一篇的內容.
上一篇講述了一些基本的vim配置方法,現在講述些我用到的插件和安裝方法.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在完成了前面的配置之后,我們的vim應該已經很好用了.不過還是有些問題沒有解決.沒有自動補全.
這時候就要出馬啦.
1. omni complete
omni complete是一個很好用的自動補全工具,支持很多語言,能自動的進行一些補全.在編譯安裝了vim73后,就自帶了.我們要在vimrc下打開
set nocp
filetype plugin on
set ofu=syntaxcomplete#Complete
第一句是關閉兼容模式,第二句則是打開匹配文件類型.一定要加上
打開了之后,就能發現很多代碼可以自動補全了.比如css,html等都能很好的工作,
使用方法是<ctrl+x><ctrl+o>
不過這還是不夠,對於c/c++程序員來說,我們還需要更強大的工具.類成員變量,類的方法也要補全出來!
所以omnicppcomplete就登場了
下載: http://www.vim.org/scripts/script.php?script_id=1520
cp omnicppcomplete-0.41.zip ~/.vim cd ~/.vim unzip omnicppcomplete-0.41.zip
之后打開vimrc,添加下列幾段
" OmniCppComplete set completeopt=menu,longest,menuone let OmniCpp_NamespaceSearch = 2 let OmniCpp_GlobalScopeSearch = 1 let OmniCpp_ShowAccess = 1 let OmniCpp_ShowPrototypeInAbbr = 1 let OmniCpp_MayCompleteDot = 1 let OmniCpp_MayCompleteArrow = 1 let OmniCpp_MayCompleteScope = 1 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"] let OmniCpp_SelectFirstItem = 2 let OmniCpp_DisplayMode=1 au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
再次打開vim,omnicpp就安裝上了.
不過,這類成員變量還是不出來啊.
原來omnicpp利用的是tag來判斷的,因此我們需要利用ctags來生成
首先要保證機器里有ctags,而且最好要5.4以上.好像是之前的有bug.
進入所在的cpp的目錄,
運行
ctags --c-kinds=+px --c++-kinds=+px --fields=+iafksS --extra=+qf your_file.cpp
這會生成一個tag文件,打開vim,運行
:set tags += tags
就會加載了.
使用的時候,在遇到->和.的時候就會自動彈出.
不過吧,這樣還是麻煩.每次還得自己運行一遍ctags,然后把tags加載進來,而且,那意味着我們的有些庫的頭文件也不能自動補全么?
首先是自動加載tags,在vimrc中加入
set tags+=tags
set tags+=/home/summer/tags/lib_tags
對於我們平常用到的頭文件,可以自己手動生成一份,放到固定的文件夾下,之后寫代碼就方便了.
比如我的lib_tags就是編譯了linux的頭文件生成的
ctags --c-kinds=+px --c++-kinds=+px --fields=+iafksS --extra=+qf -R /usr/include/*
有了這個tag,還可以發揮vim的跳轉功能.記得--extra一定要+f,這樣遇到頭文件我們也能跳轉進頭文件了.
另外我加入了當前目錄下的tags,這樣當我們生成一個tag之后,vim就回自動加載了.
而對於自動生成tags.事實上,還有人寫了一個方便的工具,下面介紹
2. omnitags
這個是國人寫的vim插件,下載地址
http://www.vim.org/scripts/script.php?script_id=2870
下載最新的版本放到~/.vim/plugin目錄下即可.
再修改vimrc
nmap <silent><leader>t :OmniTagsLoad ./tags<CR>
nmap <leader>u :OmniTagsUpdate
重啟vim,在需要自動生成tags的時候,首先加載
<leader>t //如果提示沒有tag,則會要求創建,選擇y即可 <leader>u your_files //即可把該文件加入到本目錄的tag中, //之后凡是用:w保存,tag都會被更新
現在,配合起omnicppcomplete,寫代碼就很方便了.
不過感覺提示還是不智能,而且每次要補全了還得自己手動按ctrl+x ctrl+o.不爽不爽
3. autocomplpop
這個插件就是解決我們的煩惱的
下載: http://www.vim.org/scripts/script.php?script_id=1879
同樣的
cp vim-autocomplpop.zip ~/.vim unzip vim-autocomplpop.zip
就好了.
這個插件非常強大,自動彈出也滿足了我們很多功能.比如自動彈出文件路徑等等.
這個插件的默認是keyword completion.而由於咱們已經有了omnicppcomplete,所以其實就夠了.
其對於keyword的補全實力非常強大.不過可能有人覺得,還是全部都用omni comp比較好.
於是就在網上搜了這么一段代碼
let g:AutoComplPop_Behavior = { \ 'c': [ {'command' : "\<C-x>\<C-o>", \ 'pattern' : ".", \ 'repeat' : 0} \ ] \}
事實上這個是沒有用的,要想使用的話,有兩個方式
1. 下載2.6或者更老版本的autocomplpop
從2.7開始,autocomplpop就修改了配置方式,所以之前老的版本已經無效了
2. 修改寫法
let g:acp_behavior = { 'command' : "\<C-x>\<C-o>", 'meets': mycppfunc 'repeat':0 }
在~/.vim/autoLoad/acp.vim中增加函數
照着里頭acp#meetsForKeyword的函數寫就可以了..
function mycppfunc(context) return 1 endfunction
不過這個在項目大了之后非常非常慢,所以不大推薦.默認的方法就挺好.效率也很高
4. NERDTreeToggle
這個是一個顯示文件樹形結構的插件,挺方便,一般大家也用
下載:http://www.vim.org/scripts/script.php?script_id=1658
老方法,cp后unzip在~/.vim下即可
在vimrc下加入下面語句
nmap <F2> :NERDTreeToggle<CR>
以后按F2就可以掉出來,很方便
5. taglist
taglist是利用ctags來讀取目前文件下的函數列表,變量等,很方便,推薦使用
下載:http://www.vim.org/scripts/script.php?script_id=273
還是cp后unzip在~/.vim就可以使用了
在vimrc下加入
let Tlist_Ctags_Cmd='~/bin/ctags' //這個修改成安裝ctags的目錄 let Tlist_Show_One_File=1 let Tlist_OnlyWindow=1 let Tlist_Use_Right_Window=0 let Tlist_Sort_Type='name' let Tlist_Exit_OnlyWindow=1 let Tlist_Show_Menu=1 let Tlist_Max_Submenu_Items=10 let Tlist_Max_Tag_length=20 let Tlist_Use_SingleClick=0 let Tlist_Auto_Open=0 let Tlist_Close_On_Select=0 let Tlist_File_Fold_Auto_Close=1 let Tlist_GainFocus_On_ToggleOpen=1 let Tlist_Process_File_Always=1 let Tlist_WinHeight=10 let Tlist_WinWidth=45 let Tlist_Use_Horiz_Window=0 nmap <F3> :Tlist<CR>
之后就可以使用F3調出來了
6. stl
vim對於c++的高亮提示的不好,尤其是stl很多方法和容器都沒有高亮,看着很是郁悶,這時候stl就派上用場了
下載:http://www.vim.org/scripts/script.php?script_id=2224
有了這個,vim就能對stl進行高亮了.
用法:
$ mkdir -p ~/.vim/after/syntax/cpp
$ cp stl.vim ~/.vim/after/syntax/cpp/
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
總結:
差不多把自己目前用的都介紹了.
vim用好了很強大,並不比很多IDE差.同時,由於環境限制,有的時候只能在終端下進行編程,VIM的重要性就體現出來了.用好了能很快提高開發效率.
目前筆者僅僅使用了這幾款插件.覺得很好用,如果大家還有推薦的話,可以分享下.