VIM插件

vim中設置插件

    工欲善其事,必先利其器。一個強大的開發環境可以大大提高工作效率。好吧,我知道這是廢話。。。不過,我想一定有很多跟我一樣打算進入Linux平臺開發的新手,一開始都爲找不到一個像Windows下的VS那樣可以一鍵安裝並且功能幾乎完美無缺的開發工具而鬱悶不已,甚至打算收回剛剛邁出的腳步。所幸的是,通過幾天努力,我總算配置出了一個功能完備的基於Vim的開發環境。這個開發環境除了基本的Vim外,還包括Ctags,Taglist,Cscope,SuperTab,OmniCppComplete,Winmanager,NERDTree和MiniBufExplorer等組件。

    在開始操作前,先普及下基礎概念,然後約定一下表達規範。

    1)Vim存在多個配置文件vimrc,比如/etc/vimrc,此文件影響整個系統的Vim。還有~/.vimrc,此文件隻影響本用戶的Vim。而且~/.vimrc文件中的配置會覆蓋/etc/vimrc中的配置。這裏我們只修改~/.vimrc文件。

    2)Vim的插件(plugin)安裝在Vim的runtimepath目錄下,你可以在Vim命令行下運行"set rtp“命令查看。這裏我們選擇安裝在~/.vim目錄,沒有就創建一個。

    3)當本文說”在Vim命令行下運行cmdxx命令“時,意思是指在Vim的命令行模式下運行cmdxx命令,即在Vim的正常模式下通過輸入冒號":"進入命令行模式,然後緊接着輸入命令cmdxx。在後文描述中都會省略冒號":"輸入。

    4)如果沒有說明“在Vim命令行下運行某命令”,則是在shell中執行該命令。

    5)如果命令中間被空白符間隔或有與正文容易混淆的字符,我會用雙引號將命令與正文區分。所以讀者在實際操作時,不要輸入命令最前面和最後面引號。

    6)本文關於組合快捷鍵的描述,形如a-b形式的快捷鍵表示同時按下a鍵和b鍵,而形如"a-b c"形式的快捷鍵,則表示先同時按下a鍵和b鍵,然後放開ab鍵,再按下c鍵。


    1,安裝使用Ctags

        Ctags工具是用來遍歷源代碼文件生成tags文件,這些tags文件能被編輯器或其它工具用來快速查找定位源代碼中的符號(tag/symbol),如變量名,函數名等。比如,tags文件就是Taglist和OmniCppComplete工作的基礎。


       這裏介紹從源代碼包安裝,安裝步驟跟大多數軟件的從源代碼安裝步驟一樣。

        1)從http://ctags.sourceforge.net/下載源代碼包後,解壓縮生成源代碼目錄,

        2)然後進入源代碼根目錄執行./configure,

        3)然後執行make,

        4)編譯成功後執行make install。

        5)在~/.vimrc中增加以下這行:

[plain]view plaincopyprint?
  1. map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>  
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

        到此,Ctags已安裝成功。


        使用Ctags的也很簡單。 進入我們的項目代碼根目錄,執行以下命令:

[plain]view plaincopyprint?
  1. ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .  
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

        另外,由於在前面第5條,我們已經在Vim中配置了Ctrl-F12組合快捷鍵,所以我們也可以進入代碼根目錄後,打開Vim,按下Ctrl-F12快捷鍵自動生成tags文件。

        命令執行完後,會在源代碼目錄生成tags文件。Vim默認會自動讀取當前目錄下的tags文件,所以不需要修改~/.vimrc文件。此時,我們已經具有定義跳轉的功能了。有兩組快捷鍵是最常用的。

               Ctrl-]    跳轉到光標所在符號的定義。

               Ctrl-t    回到上次跳轉前的位置。

        更多功能通過命令man ctags或在Vim命令行下運行help ctags查詢。


    2,安裝使用Taglist

        Taglist是vim的一個插件,提供源代碼符號的結構化視圖。


        1)從http://www.vim.org/scripts/script.php?script_id=273下載安裝包,也可以從http://vim-taglist.sourceforge.net/index.html下載。

        2)進入~/.vim目錄,將Taglist安裝包解壓,解壓後會在~/.vim目錄中生成幾個新子目錄,如plugin和doc(安裝其它插件時,可能還會新建autoload等其它目錄)。

        3)進入~/.vim/doc目錄,在Vim下運行"helptags ."命令。此步驟是將doc下的幫助文檔加入到Vim的幫助主題中,這樣我們就可以通過在Vim中運行“help taglist.txt”查看taglist幫助。

        4)打開配置文件~/.vimrc,加入以下兩行:

[plain]view plaincopyprint?
  1. let Tlist_Show_One_File=1  
  2. let Tlist_Exit_OnlyWindow=1  
let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1

        到此安裝已經完成。


       在Vim命令行下運行TlistToggle命令就可以打開Taglist窗口,再次運行TlistToggle則關閉。示圖如下:


        我們可以通過Ctrl-w快捷鍵或鼠標點擊在Taglist窗口和編輯區之間切換焦點,在Taglist窗口用鼠標或鍵盤選擇某個符號,然後點擊或回車,就可以跳轉到該符號定義的位置。

        更多功能可通過在Vim命令行下運行help taglist.txt查詢。


    3,安裝使用Cscope

        Cscope提供交互式查詢語言符號功能,如查詢哪些地方使用某個變量或調用某個函數。


        Cscope已經是Vim的標準特性,默認都有支持,官方網址爲http://cscope.sourceforge.net/

        1)在Vim下運行version查看Vim支持哪些特性,前面有前綴符號+的爲支持。如果支持Cscope,則直接進入2),否則下載Cscope源代碼包編譯安裝。步驟同Ctags安裝。

        2)確定Vim已支持Cscope後,將文件http://cscope.sourceforge.net/cscope_maps.vim下載到~/.vim/plugin目錄。


        到這裏,我們就可以開始使用Cscope了。

       1)使用Cscope需要生成cscope數據庫文件。進入項目代碼根目錄運行命令:

[plain]view plaincopyprint?
  1. cscope -Rbq -f path/xxx.out  
cscope -Rbq -f path/xxx.out

            命令運行後會生成xxx.out文件,即cscope數據庫文件。更多用法參考man cscope文檔。

       2)進入項目代碼根目錄,在Vim下運行命令:

[plain]view plaincopyprint?
  1. cs add path/xxx.out  
cs add path/xxx.out

           此命令將cscope數據庫載入Vim。

       3)Cscope常用快捷鍵

           Ctrl-\ s 查找所有當前光標所在符號出現過位置。
           Ctrl-\ c 查找所有調用當前光標所在函數的函數。

       按下快捷鍵查找結束後會在編輯區下方出現查找結果的列表,輸入結果編號並回車,就能跳轉到該查找結果在源代碼中的相應位置。例如,我們將光標移到initial_pool_size變量定義的位置,即17行,然後按下"Ctrl-\ s"組合快捷鍵,得到示圖如下:


            然後我們輸入2,並回車,就能跳轉到第2個查找結果。         

           爲了界面更好看,可以把Cscope的查找結果輸出到quickfix窗口,需要在~/.vimrc中加入下面這行:

[plain]view plaincopyprint?
  1. set cscopequickfix=s-,c-,d-,i-,t-,e-  
set cscopequickfix=s-,c-,d-,i-,t-,e-            這樣,通過快捷鍵查找某個符號後,會立即跳轉到第一個找到的該符號出現的位置。如果你對這次默認跳轉的位置不滿意,在Vim命令行下運行cw命令,就能在編輯區下面quickfix窗口看到所有查找結果的列表,點擊相應列表項就能跳轉到相應位置。這個功能已經跟VS很接近了吧:)


        更多功能可通過命令man cscope或在Vim命令行下運行help cscope查詢。


    4,安裝使用OmniCppComplete

        OmniCppComplete主要提供輸入時實時提供類或結構體的屬性或方法的提示和補全。跟Talist一樣,OmniCppComplete也是一個Vim插件,同樣依賴與Ctags工具生成的tags文件。安裝步驟跟Taglist類似。


        從http://www.vim.org/scripts/script.php?script_id=1520下載安裝包後。

       1)進入~/.vim目錄,將安裝版解壓縮

       2)進入~/.vim/doc目錄,在Vim命令行下運行"helptags .”

       3)在~/.vimrc中加入以下幾行:

[plain]view plaincopyprint?
  1. set nocp  
  2. filetype plugin on  
set nocp filetype plugin on


       OmniCppComplete的使用幾乎跟VS下的VA一樣。如下圖所示,輸入m0.之後立即彈出my_class類中所有的函數列表,然後用上下鍵選擇合適的函數。


        更多功能通過在Vim命令行下運行"help omnicppcomplete"查詢。


    5,安裝使用SuperTab

        SuperTab使Tab快捷鍵具有更快捷的上下文提示功能。跟OmniCppComplete一樣,SuperTab也是一個Vim插件。


        從http://www.vim.org/scripts/script.php?script_id=1643下載安裝版。這個安裝包跟先前的幾個Vim插件不同,它是一個vba文件,即Vimball格式的安裝包,這種格式安裝包提供傻瓜式的安裝插件的方法。

       1)用Vim打開.vba安裝包文件。

       2)在Vim命令行下運行命令“UseVimball ~/.vim”。此命令將安裝包解壓縮到~/.vim目錄。VImball安裝方式的便利之處在於你可以在任何目錄打開.vba包安裝,而不用切換到安裝目的地目錄。而且不用運行helptags命令安裝幫助文檔。

       3)在~/.vimrc文件中加入以下這行:

[plain]view plaincopyprint?
  1. let g:SuperTabDefaultCompletionType="context"  
let g:SuperTabDefaultCompletionType="context" 

       SuperTab使用很簡單,只要在輸入變量名或路徑名等符號中途按Tab鍵,就能得到以前輸入過的符號列表,並通過Tab鍵循環選擇。



    6,安裝使用Winmanager,NERDTree和MiniBufExplorer

        前面介紹的幾個工具和插件,主要提供快捷的編輯功能,如定義跳轉,符號查詢,符號提示與補全等。這裏的三個插件,主要優化佈置VIm的界面。具體來說,NERDTree提供樹形瀏覽文件系統的界面,MiniBufExplorer提供多文件同時編輯功能,而Winmanager將這NERDTree界面和Taglist界面整合起來,使Vim更像VS!


        分別從http://www.vim.org/scripts/script.php?script_id=1658

                    http://www.vim.org/scripts/script.php?script_id=159

                    http://www.vim.org/scripts/script.php?script_id=95

        下載NERDTree,MiniBufExplorer和Winmanager安裝包(Winmanager還有個更新的vba版本http://www.vim.org/scripts/script.php?script_id=1440,這裏選用舊版本的Winmanger)。

        1)像其它插件一樣,將NERDTree安裝包解壓到~/.vim目錄。並進入doc目錄,在Vim命令行下運行"helptags ."命令。

        2)MiniBufExplorer只有一個.vim文件,將其拷貝到~/.vim/plugin目錄。

        3)在~/.vimrc文件中加入以下幾行:

[plain]view plaincopyprint?
  1. let g:miniBufExplMapWindowNavVim = 1   
  2. let g:miniBufExplMapWindowNavArrows = 1   
  3. let g:miniBufExplMapCTabSwitchBufs = 1   
  4. let g:miniBufExplModSelTarget = 1  
  5. let g:miniBufExplMoreThanOne=0  
let g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplMapWindowNavArrows = 1 let g:miniBufExplMapCTabSwitchBufs = 1 let g:miniBufExplModSelTarget = 1 let g:miniBufExplMoreThanOne=0        4)將Winmanager安裝包解壓到~/.vim目錄。

        5)在~/.vimrc文件中加入以下幾行:

[plain]view plaincopyprint?
  1. let g:NERDTree_title="[NERDTree]"  
  2. let g:winManagerWindowLayout="NERDTree|TagList"  
  3.   
  4. function! NERDTree_Start()  
  5.     exec 'NERDTree'  
  6. endfunction  
  7.   
  8. function! NERDTree_IsValid()  
  9.     return 1  
  10. endfunction  
  11.   
  12. nmap wm :WMToggle<CR>  
let g:NERDTree_title="[NERDTree]" let g:winManagerWindowLayout="NERDTree|TagList" function! NERDTree_Start() exec 'NERDTree' endfunction function! NERDTree_IsValid() return 1 endfunction nmap wm :WMToggle<CR>

        6)這個版本的Winmanager好像有個小bug,你在打開Winmanager界面時,會同時打開一個空的文件。這會影響後續使用,所以我們要在打開Winmanager時關掉這個空文件。在~/.vim/plugin目錄下的winmanager.vim文件中找到以下函數定義並在第5行下添加第6行的內容:

[plain]view plaincopyprint?
  1. function! <SID>ToggleWindowsManager()  
  2.    if IsWinManagerVisible()  
  3.       call s:CloseWindowsManager()  
  4.    else  
  5.       call s:StartWindowsManager()  
  6.       exe 'q'  
  7.    end  
  8. endfunction  
function! <SID>ToggleWindowsManager() if IsWinManagerVisible() call s:CloseWindowsManager() else call s:StartWindowsManager() exe 'q' end endfunction

        到這裏,就大功告成了!        


        現在進入我們的項目目錄,打開Vim,按下組合快捷鍵w-m就可以我們的嶄新的Vim了!再次按下w-m就可關閉界面。示圖如下:


        界面最上面的一條窄邊就是MiniBufExplorer,可以看到我打開了兩個文件cache.c和assoc.c,是不是很像VS的標籤?

        緊靠MiniBufExplorer下方左邊的矩形區域就是NERDTree。在這個窗口,我們可以用鼠標或鍵盤方便的瀏覽整個文件系統,在某個文件上點擊或回車,就可以在右邊編輯區域打開該文件。

        NERDTree下方的就是前面安裝的Taglist界面。


    7,其它有用的~/.vimrc設置

        設置配色方案,我用的是eveing方案,配色方案保存在/usr/share/vim/vimXY/colors

[plain]view plaincopyprint?
  1. colo evening  
colo evening        顯示行數

[plain]view plaincopyprint?
  1. set nu  
set nu        與自動縮進相關的選項
[plain]
view plaincopyprint?
  1. set autoindent  
  2. set tabstop=4  
  3. set shiftwidth=4  
  4. p;   set mouse=a
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章