vim + ctags +escope + taglist 環境搭建
閱讀原始碼的工具有很多,而且如今的整合開發環境(IDE)也很強大,但對於經常使用vim編輯器的程式設計師來說,對vim的強大絕對是“不拋棄,不放棄”的,況且我們只要安裝一些外掛配合vim的工作一樣能達到IDE的效果,好了,廢話少說。瀏覽了很多有關的網頁資源後,發現有很多外掛可以用,但在此推薦3款比較常用的“小”外掛供大家參考,它們其實並不“小”,非常強大!一般地,只是單個小程式原始碼的閱讀就不必勞駕外掛了(我是這樣認為的),對於工程程式碼不用它們就有點困難了。 這三個外掛分別是:ctags , cscope , taglist 先看看效果如何吧 在ubuntu下的安裝與配置如下—— (1) ctags 外掛 a) 功能:對瀏覽程式碼非常的方便, 可以在函式, 變數之間跳來跳去等等等等 (更多說明請百度或谷歌一下) b) 安裝配置: 終端下輸入 sudo apt-get install ctags 如果沒發現該軟體包就用 sudo apt-get install exuberant-ctags 就行了…… 如果還不行可以到官網下載原始碼手動編譯安裝,有點麻煩是不是?不要嫌麻煩,這也是一個學習的機會,如果遇到其他類似的你也可以仿照這裡的例子,再配合壓縮包裡的README檔案就能手動安裝了,你說是不是,呵呵。 下載地址 http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz 下載解壓後 $ cd ctags-5.8 $ ./configure $ make # make install // 需要root許可權 使用 ctags --hlep 命令簡單測試一下安裝成功了沒 >^_^< c) 使用方法: 然後去你的原始碼目錄, 如果你的原始碼是多層的目錄, 就去最上層的目錄, 在該目錄下 執行命令: ctags -R 其中-R表示遞迴遍歷 我現在以 linux-kernel 的原始碼目錄做演示 $ cd ~/ linux-kernel $ ctags -R (如果是kernel原始碼的話還可以用 make tags) 此時在/home/ linux-kernel/目錄下會生成一個 tags 檔案, 現在用vim開啟 即輸入vim 然後Shift + : 然後再在vim末行執行命令, : set tags=/home/bob/linux-kernel/tags (最前面的:是提示符,不必輸入) 每次都要輸入這個才能使tags生效,我很懶,所以把該命令加入到~/.vimrc中, 你也可以將這句話放到~/.vimrc中去, 如果你經常在這個 工程目錄程式設計的話. 再如果你經常在不同工程間程式設計, 可以在.vimrc中加上: set tags=tags; " 其中 ; 不能沒有 set autochdir d) 使用舉例: 把游標定位到某一函式名上或者巨集上, 按下 Ctrl + ], vim就可以自動切換到該函式定義處! 要返回只需要按下Ctrl + o 或者 Ctrl + t. 是不是很方便吖。 (2) cscope 外掛 a) 功能:可以對函式以及部分型別定義進行跳轉(更多說明請百度或谷歌一下) b) 安裝配置: sudo apt-get install cscope 這個源裡應該有了,如果沒有請到其官網 http://sourceforge.net/projects/cscope/files/ 下載原始碼安裝,具體安裝方法和 ctags 一樣的,我就不羅嗦啦! d)使用舉例: 在終端下,轉到你原始碼的所在目錄然後 $cscope -Rbkq <回車> 說明一下引數: R 表示把所有子目錄裡的檔案也建立索引 b 表示cscope不啟動自帶的使用者介面,而僅僅建立符號資料庫 q 生成cscope.in.out和cscope.po.out檔案,加快cscope的索引速度 k 在生成索引檔案時,不搜尋/usr/include目錄 之後會在當前目錄生成幾個檔案, cscope.in.out和cscope.po.out檔案,cscope.out vim的normal模式下輸入 :cs add cscope.out 不會吧,每次都要輸入這些命令,煩死人了,有沒有捷徑呢?想偷懶總有人找到方法的, sudo gedit ~/.vimrc ;然後在該檔案下新增如下程式碼: if filereadable("cscope.out") cs add cscope.out endif 這樣每次開啟vim就可以直接使用cscope了。 再試試把下面的內容複製到~/.vimrc裡,這樣就可以利用相應的快捷鍵進行不同的查找了. if has("cscope") set cscopetag " 使支援用 Ctrl+] 和 Ctrl+t 快捷鍵在程式碼間跳來跳去 " check cscope for definition of a symbol before checking ctags: " set to 1 if you want the reverse search order. set csto=1 " add any cscope database in current directory if filereadable("cscope.out") cs add cscope.out " else add the database pointed to by environment variable elseif $CSCOPE_DB !="" cs add $CSCOPE_DB endif " show msg when any other cscope db added set cscopeverbose nmap <C-/>s :cs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-/>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-/>c :cs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-/>t :cs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-/>e :cs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-/>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-/>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR> nmap <C-/>d :cs find d <C-R>=expand("<cword>")<CR><CR> endif 附常用的命令: :cs find s ---- 查詢C語言符號,即查詢函式名、巨集、列舉值等出現的地方 :cs find g ---- 查詢函式、巨集、列舉等定義的位置,類似ctags所提供的功能 :cs find d ---- 查詢本函式呼叫的函式:cs find c ---- 查詢呼叫本函式的函式 :cs find t: ---- 查詢指定的字串 :cs find e ---- 查詢egrep模式,相當於egrep功能,但查詢速度快多了 :cs find f ---- 查詢並開啟檔案,類似vim的find功能 :cs find i ---- 查詢包含本檔案的文 Ctrl+]將跳到游標所在變數或函式的定義處 Ctrl+T返回 更多幫助在vim末行命令模式下輸入cs 或 cscope獲得幫助資訊。 更多的例子如下 首先進入原始碼目錄, 在linux終端中輸入以下命令以建立cscope資料庫: $ find ~/work/..Project/ -name "*.h" -o -name "*.cpp" > cscope.files $ cscope -bkq -i cscope.files 如果是在windows環境中, 則換成如下命令: dir /s /b *.cpp *.h > cscope.files cscope -b -q -k -i cscope.files 然後, 用vim開啟一個原始檔(如: vim main.cpp), 開啟後, 第一件事就是匯入cscope資料庫了: :cs add /home/yourname/workpace/cscope.out /home/yourname/workpace cscope資料庫匯入成功後, 就可以利用上面定義的快捷鍵進行相關的查詢, (3) taglist 外掛 a) 功能: 高效地瀏覽原始碼, 其功能就像vc中的workpace, 那裡面列出了當前檔案中的所有巨集等等。 b) 安裝就不需要了,簡單配置一下就行了,但需要ctags的支援, 下載地址 http://www.vim.org/scripts/download_script.php?src_id=7701 下載後,解壓縮后里面有兩個目錄 plugin和doc ,然後分別把plugin/taglist.vim複製到~/.vim/plugin目錄下, 把doc/taglist.txt複製到~/.vim/doc目錄下,ok! 記得把下面的加入到~/.vimrc 中哦 " 按F8按鈕,在視窗的左側出現taglist的視窗,像vc的左側的workpace nnoremap <silent> <F8> :TlistToggle<CR><CR> " :Tlist 呼叫TagList let Tlist_Show_One_File=0 " 只顯示當前檔案的tags let Tlist_Exit_OnlyWindow=1 " 如果Taglist視窗是最後一個視窗則退出Vim let Tlist_Use_Right_Window=1 " 在右側視窗中顯示 let Tlist_File_Fold_Auto_Close=1 " 自動摺疊 d) 使用舉例:這個就不用多說了,自己按F8試試就知道了,直接用滑鼠就能操作。 在taglist視窗中,還可以使用下面的快捷鍵: <CR> 跳到游標下tag所定義的位置,用滑鼠雙擊此tag功能也一樣 o 在一個新開啟的視窗中顯示游標下tag <Space> 顯示游標下tag的原型定義 u 更新taglist視窗中的tag s 更改排序方式,在按名字排序和按出現順序排序間切換 x taglist視窗放大和縮小,方便檢視較長的tag + 開啟一個摺疊,同zo - 將tag摺疊起來,同zc * 開啟所有的摺疊,同zR = 將所有tag摺疊起來,同zM [[ 跳到前一個檔案 ]] 跳到後一個檔案 q 關閉taglist視窗 <F1> 顯示幫助 可以用“:TlistOpen”開啟taglist視窗,用“:TlistClose”關閉taglist視窗。或者使用“:TlistToggle”在開啟和關閉間切換。