配置vim支持源碼瀏覽(vim+ctags+cscope)

配置vim支持源碼瀏覽(vim+ctags+cscope) linux


介紹c++

windows下流行的源碼閱讀軟件是source insight,而linux則沒有與其可匹敵圖形化的源碼閱讀軟件,如今日趨流行的eclipse開發軟件,雖然能夠較好的支持源碼中符號之間相互跳轉,但整體感受不是十分強大和好用,可能由於eclipse是經過cdt插件的形式來支持c/c++項目,不少方面表現還有待提升。並且eclipse在終端下沒法使用,而今天的主角vim+ctags+cscope可謂是無所不能,真真的強大之極。下面是關於這個組合配置和使用的簡單介紹,更多的功能能夠往後慢慢摸索。數據庫

 

組合介紹vim

vimlinux超強的文本編輯器。windows

ctags對源代碼文件掃描生成交叉引用符號表,支持大多數主流語言,但相對功能簡單,配合vim能夠實現從變量和函數的調用點到定義點的跳轉。eclipse

cscope能夠理解爲ctags的增強版,但支持語言的種類要少一些,徹底支持c語言。它生成的源碼符號引用表更加複雜,配合vim能夠實現符號各引用點之間任意切換(好比從函數調用點到定義點,從定義點到調用點等)。編輯器

關於更多的vim,ctgascscope的知識能夠去它們的官網,也能夠查看man手冊瞭解一些基本的使用信息和幫助。函數

準備測試

fedora系統的軟件倉庫已包括了上述幾個軟件包,若是沒有安裝能夠經過下面命令直接在線安裝spa

#yum install vim-enhanced ctags cscope

vim-enhancedvim的一個徹底功能版,最好安裝此版本。

配置

vim

爲了使vim更好支持瀏覽和編寫程序代碼,能夠啓用一些默認沒有啓用vim的擴展功能,如顯示行號,代碼自動縮進等。

#vim /etc/vimrc

#增長此行默認將開啓vim行號顯示功能

set number

 

cscope

cscope須要一個配置文件才能和vim一塊兒工做,在下面這個地址能夠找到一份cscope官方的目標配置文件,下載或者拷貝該文件至/usr/share/vim/vimxx/plugin/目錄。

cscope配置文件:http://cscope.sourceforge.net/cscope_maps.vim

 

到此一個基於vim的源碼閱讀環境已經配置完成。

 

使用

如今你能夠進入一個源碼目錄作一個測試,

進入源碼項目根目錄運行下面命令建符號立交叉引用文件:

#ctags -R . && cscope -Rqb

命令成功執行後將在當前目錄下生成四個文件,分別爲cscope.in.outcscope.outcscope.po.outtags,他們是ctagscscope生成的索引文件。

如何使用這個功能,其實這個得看你有什麼需求了,下面舉例兩個應用例子:

把編輯器定位到項目源碼中main函數開始的位置上,操做以下:

#vim -t main

當前vim編輯器中,光標指在read函數上,這是該函數的一個調用,我相要查看它的定義:

操做:把光標定位到read上後,能夠直接經過快鍵Ctrl+]實現跳轉。

注:如上事例操做的前提是操做目錄須和上面提到的4個索引文件所在的目錄爲同一目錄。

推薦:把生成索引文件的命令寫入一個腳本文件並放到/bin/目錄,這樣之後就能夠經過運行該腳本便捷快速的生成項目源碼文件的索引文件。

 

出錯解決

再存在索引文件的目錄運行vim時,程序提示添加了cscope數據庫cscope.out,按回車能夠確認。若是再此步中出現載入重複的數據庫錯誤,那是由於vimrc文件和cscope.vim配置文件中出現兩次重複的載入操做,能夠經過修改vimrc(或者cscope.vim)文件修正,以下:

#vim /etc/vimrc

...

38 " add any database in current directory

39 if filereadable("cscope.out")

40 "cs add cscope.out

41 " else add database pointed to by environment

42 elseif $CSCOPE_DB != ""

43 " cs add $CSCOPE_DB

44 endif

能夠像以下同樣使用雙引號註釋掉40行和43行,甚至能夠直接刪除3843行的代碼,此段代碼在cscope.vim文件中有一份完整的拷貝。

 

Cscope快鍵解析

vimcscope的功能能夠經過一些快鍵操做實現,這些快鍵定義在cscope.vim配置文件中

查看該文件內容:

#vim /usr/share/vim/vimxx/plugin/cscope.vim

....

99 nmap <F5>s :cs find s <C-R>=expand("<cword>")<CR><CR>

100 nmap <F5>g :cs find g <C-R>=expand("<cword>")<CR><CR>

101 nmap <F5>c :cs find c <C-R>=expand("<cword>")<CR><CR>

102 nmap <F5>t :cs find t <C-R>=expand("<cword>")<CR><CR>

103 nmap <F5>e :cs find e <C-R>=expand("<cword>")<CR><CR>

104 nmap <F5>f :cs find f <C-R>=expand("<cfile>")<CR><CR>

105 nmap <F5>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>

106 nmap <F5>d :cs find d <C-R>=expand("<cword>")<CR><CR>

....

快捷配置行解析,nmap表示定義vim非編輯模式下快鍵關鍵字,<F5>s表示快鍵組合F5s鍵,cs find c 表示前定義快鍵等效的命令組合,再後面的內容是實現快鍵發生時傳遞vim中當前光標所在的字符內容。cscope配置中默認的快鍵主鍵是Ctrl+/,但這組快鍵組合在個人機器卻沒法工做,因此我把默認組合鍵主鍵都換成了F5,若是你的狀況相似,也能夠仿照次方式另設一個主鍵。再運行的vim中若是想查看設置的快鍵是否生效,能夠經過命令查詢,如輸入:nmap回車能夠查看當前vim中已設置的全部非編輯模式下的快鍵。

下面是一條查找函數全部調用點的操做事例(已上面配置文件爲例):

若是你想查詢read函數的全部調用點,移動光標到read單詞上,按F5+s快鍵組合後,將會在vim編輯界面的下部列出全部read符號引用條目。

 

後記

如上介紹僅是一個入門級的vim+ctagscscope配置使用文檔,關於vim強大的插件支持能夠打形成一個超級IDE的後續報道,但願下一步能夠補充,這個目前尚未研究。

相關文章
相關標籤/搜索