vim+cscope簡易教程
Cscope具有純正的Unix血統,它最早是由貝爾實驗室為PDP-11計算機開發的,後來成為商用的AT&T Unix發行版的組成部分。直到2000年4月,這個工具才由SCO公司以BSD license開源發行。
Cscope的主頁在http://cscope.sourceforge.net/,如果你的計算機上沒有cscope,你可以在此處下載它,在寫本文時,它的最新版本是15.8b。mac中可以用homebrew一鍵安裝。
1、cscope的用法很簡單,首先需要為你的代碼生成一個cscope數據庫。在你的項目根目錄運行:
cscope -Rbq
2、這個命令會生成三個文件:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符號索引,後兩個文件是使用"-q"選項生成的,可以加快cscope的索引速度。
3、在缺省情況下,cscope在生成數據庫後就會進入它自己的查詢界面,我們一般不用這個界面,所以使用了"-b"選項。如果你已經進入了這個界面,按CTRL-D退出。
4、Cscope在生成數據庫中,在你的項目目錄中未找到的頭文件,會自動到/usr/include目錄中查找。如果你想阻止它這樣做,使用"-k"選項。
5、-R表示索引子目錄。R是遞歸的首字符簡寫。
在vim中使用cscope:
1、要在vim中使用cscope的功能,需要在編譯vim時選擇"+cscope"。vim的cscope接口先會調用cscope的命令行接口,然後分析其輸出結果找到匹配處顯示給用戶。
2、在vim中使用cscope非常簡單,首先調用"cscope add"命令添加一個cscope數據庫,然後就可以調用"cscope find"命令進行查找了。
3、vim支持8種cscope的查詢功能,如下:
- s: 查找C語言符號,即查找函數名、宏、枚舉值等出現的地方
- g: 查找函數、宏、枚舉等定義的位置,類似ctags所提供的功能
- d: 查找本函數調用的函數
- c: 查找調用本函數的函數
- t: 查找指定的字符串
- e: 查找egrep模式,相當於egrep功能,但查找速度快多了
- f: 查找並打開文件,類似vim的find功能
- i: 查找包含本文件的文件
4、 例如,我們想在vim 7.0的源代碼中查找調用do_cscope()函數的函數,我們可以輸入:":cs find c do_cscope",回車後發現沒有找到匹配的功能,可能並沒有函數調用do_cscope()。我們再輸入":cs find s do_cscope",查找這個C符號出現的位置,現在vim列出了這個符號出現的所有位置。
5、我們還可以進行字符串查找,它會雙引號或單引號括起來的內容中查找。還可以輸入一個正則表達式,這類似於egrep程序的功能,但它是在交叉索引數據庫中查找,速度要快得多。
6、vim提供了一些選項可以調整它的cscope功能:
- cscopeprg選項用於設置cscope程序的位置。
- cscopequickfix設定是否使用quickfix窗口來顯示cscope的結果,詳情請":help cscopequickfix";
- 如果你想vim同時搜索tag文件以及cscope數據庫,設置cscopetag選項;
- cscopetagorder選項決定是先查找tag文件還是先查找cscope數據庫。設置為0則先查找cscope數據庫,設置為1先查找tag文件。我通常設置為1,因為在tag文件中查找到的結果,會把最佳匹配列在第一位。
7、vim的手冊中給出了使用cscope的建議方法,使用命令":help cscope-suggestions"查看。
8、Using Cscope on large projects (example: the Linux kernel):http://cscope.sourceforge.net/large_projects.html
9、the vim+cscope tutorial:http://cscope.sourceforge.net/cscope_vim_tutorial.html
vim+cscope簡易教程