使用vim + cscope/ctags,就可以實現SourceInsight的功能,以後可以不再用盜版SouceInsight讀代碼了。
按 照vim裡cscope的參考手冊(在vim中執行":help cscope"命令),把cscope功能加到.vimrc裡後(需要你的vim在編譯時間選擇了"--enable-cscope"選項,否則你需要重新 編譯vim),配置就算完成了。然後用下面的命令產生代碼的符號索引檔案:
cscope -Rbkq
這個命令會產生三個檔案:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符號索引,後兩個檔案是使用"-q"選項產生的,可以加快cscope的索引速度。
上面所用到的命令參數,含義如下:
-R: 在產生索引檔案時,搜尋子目錄樹中的代碼
-b: 只產生索引檔案,不進入cscope的介面
-k: 在產生索引檔案時,不搜尋/usr/include目錄
-q: 產生cscope.in.out和cscope.po.out檔案,加快cscope的索引速度
接下來,就可以在vim裡讀代碼了。
不 過在使用過程中,發現無法找到C++的類、函數定義、調用關係。仔細閱讀了cscope的手冊後發現,原來cscope在產生索引檔案時,只搜尋類型為 C, lex和yacc的檔案(尾碼名為.c, .h, .l, .y),C++的檔案根本沒有產生索引。不過按照手冊上的說明,cscope支援c++和Java語言的檔案。
於是按照cscope手冊上提供的方法,先產生一個檔案清單,然後讓cscope為這個列表中的每個檔案都產生索引。
為了方便使用,編寫了下面的指令碼來更新cscope和ctags的索引檔案:
#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R
這個指令碼,首先使用find命令,尋找目前的目錄及子目錄中所有尾碼名為".h", ".c"和".cc"的檔案,並把尋找結果重新導向到檔案cscope.files中。
然後cscope根據cscope.files中的所有檔案,產生符號索引檔案。
最後一條命令使用ctags命令,產生一個tags檔案,在vim中執行":help tags"命令查詢它的用法。它可以和cscope一起使用。
cscope的首頁在:http://cscope.sourceforge.net/
在vim的網站上,有很多和cscope相關的外掛程式,可以去找一下你有沒有所感興趣的。搜尋結果在這裡:
http://www.vim.org/scripts/script_search_results.php?keywords=cscope&script_type=&order_by=rating&direction=descending&search=search