vim配置(自動補全,自動生成tag,一些使用插件taglist,nerdtree)


這篇文章還是承接了上一篇的內容.

上一篇講述了一些基本的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的重要性就體現出來了.用好了能很快提高開發效率.

目前筆者僅僅使用了這幾款插件.覺得很好用,如果大家還有推薦的話,可以分享下.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM