配置vim支持源码浏览(vim+ctags+cscope)
2019獨角獸企業重金招聘Python工程師標準>>>
配置vim支持源碼瀏覽(vim+ctags+cscope)
介紹
windows下流行的源碼閱讀軟件是source insight,而linux則沒有與其可匹敵圖形化的源碼閱讀軟件,現在日趨流行的eclipse開發軟件,雖然可以較好的支持源碼中符號之間相互跳轉,但總體感覺不是十分強大和好用,可能因為eclipse是通過cdt插件的形式來支持c/c++項目,很多方面表現還有待提高。而且eclipse在終端下無法使用,而今天的主角vim+ctags+cscope可謂是無所不能,真真的強大之極。下面是關于這個組合配置和使用的簡單介紹,更多的功能可以日后慢慢摸索。
?
組合介紹
vim是linux超強的文本編輯器。
ctags對源代碼文件掃描生成交叉引用符號表,支持大多數主流語言,但相對功能簡單,配合vim可以實現從變量和函數的調用點到定義點的跳轉。
cscope可以理解為ctags的加強版,但支持語言的種類要少一些,完全支持c語言。它生成的源碼符號引用表更加復雜,配合vim可以實現符號各引用點之間任意切換(比如從函數調用點到定義點,從定義點到調用點等)。
關于更多的vim,ctgas和cscope的知識可以去它們的官網,也可以查看man手冊了解一些基本的使用信息和幫助。
準備
fedora系統的軟件倉庫已包括了上述幾個軟件包,如果沒有安裝可以通過下面命令直接在線安裝
#yum install vim-enhanced ctags cscope
vim-enhanced是vim的一個完全功能版,最好安裝此版本。
配置
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.out、cscope.out、cscope.po.out和tags,他們是ctags和cscope生成的索引文件。
如何使用這個功能,其實這個得看你有什么需求了,下面舉例兩個應用例子:
1?把編輯器定位到項目源碼中main函數開始的位置上,操作如下:
#vim -t main
2?當前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行,甚至可以直接刪除38到43行的代碼,此段代碼在cscope.vim文件中有一份完整的拷貝。
?
Cscope快鍵解析
在vim中cscope的功能可以通過一些快鍵操作實現,這些快鍵定義在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表示快鍵組合F5加s鍵,cs find c?表示前定義快鍵等效的命令組合,再后面的內容是實現快鍵發生時傳遞vim中當前光標所在的字符內容。cscope配置中默認的快鍵主鍵是Ctrl+/,但這組快鍵組合在我的機器卻無法工作,所以我把默認組合鍵主鍵都換成了F5,如果你的情況類似,也可以仿照次方式另設一個主鍵。再運行的vim中如果想查看設置的快鍵是否生效,可以通過命令查詢,如輸入:nmap回車可以查看當前vim中已設置的所有非編輯模式下的快鍵。
下面是一條查找函數所有調用點的操作事例(已上面配置文件為例):
如果你想查詢read函數的所有調用點,移動光標到read單詞上,按F5+s快鍵組合后,將會在vim編輯界面的下部列出所有read符號引用條目。
?
后記
如上介紹僅是一個入門級的vim+ctags+cscope配置使用文檔,關于vim強大的插件支持可以打造成一個超級IDE的后續報道,希望下一步可以補充,這個目前還沒有研究。
轉載于:https://my.oschina.net/u/2528742/blog/681053
總結
以上是生活随笔為你收集整理的配置vim支持源码浏览(vim+ctags+cscope)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python核心编程(第九章)--文件和
- 下一篇: github的一些简单用法