將Vim改造為強大的IDE—Vim整合Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有圖有真相)

smilestone322發表於2017-09-29

轉自:http://blog.csdn.net/bokee/article/details/6633193


工欲善其事,必先利其器。一個強大的開發環境可以大大提高工作效率。好吧,我知道這是廢話。。。不過,我想一定有很多跟我一樣打算進入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中增加以下這行:

      map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

        到此,Ctags已安裝成功。


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

      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,加入以下兩行:

       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資料庫檔案。進入專案程式碼根目錄執行命令:

     cscope -Rbq -f path/xxx.out

            命令執行後會生成xxx.out檔案,即cscope資料庫檔案。更多用法參考man cscope文件。

       2)進入專案程式碼根目錄,在Vim下執行命令:

     cs add path/xxx.out

           此命令將cscope資料庫載入Vim。

       3)Cscope常用快捷鍵

           Ctrl-\ s 查詢所有當前游標所在符號出現過位置。
           Ctrl-\ c 查詢所有呼叫當前游標所在函式的函式。

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


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

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

     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中加入以下幾行:

     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檔案中加入以下這行:

     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檔案中加入以下幾行:

      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檔案中加入以下幾行:

      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行的內容:

     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

    colo evening
        顯示行數
    set nu
        與自動縮排相關的選項
    set autoindent
    set tabstop=4
    set shiftwidth=4
    set mouse=a



相關文章