首先自然是安裝vim跟cscope了
如果項目比較簡單, 那就直接cscope -R, 會在當前目錄下生成一個數據庫文件cscope.out
這個時候用vim編輯項目中的任意一個源文件, :cs show 可能會顯示 “no cscope connection"
這是因為vim沒有幫你自動加載數據庫文件, 用:cs add cscope.out就可以了
這個時候命令:cs find s tagname就可以用了, 但用ctrl + ]的時候不會自動跳轉, 這還是因為vim沒有把你的cscope數據庫文件當成tag文件, 需要用: set cst 或者:set cscopetag, 這樣就會把cscope的數據庫當成tag文件了
把下面代碼放到.vimrc文件中, 以后系統就會自動幫你做了
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " cscope setting """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" if has("cscope") set csprg=/usr/bin/cscope set csto=1 set cst set nocsverb " add any database in current directory if filereadable("cscope.out") cs add cscope.out endif set csverb endif
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> set tag=tag; set autochdir |
如果有大型的項目, cscope -R不但會消耗大量的時間, 而且還會干擾tags,所以一般會現生成一個列表
LNX=/home/jru/linux-2.4.18 cd / find $LNX \ -path "$LNX/arch/*" ! -path "$LNX/arch/i386*" -prune -o \ -path "$LNX/include/asm-*" ! -path "$LNX/include/asm-i386*" -prune -o \ -path "$LNX/tmp*" -prune -o \ -path "$LNX/Documentation*" -prune -o \ -path "$LNX/scripts*" -prune -o \ -path "$LNX/drivers*" -prune -o \ -name "*.[chxsS]" -print >/home/jru/cscope/cscope.files |
然后使用這個列表生成一個cscope.out的數據庫文件,(上面加了絕對路徑,使得數據庫文件可以放在任意地方)
cd /home/jru/cscope cscope -bkq -i cscope.files |
這樣就會生成一個數據庫文件了
cscope的一些參數的意義如下
- -R: 在生成索引文件時,搜索子目錄樹中的代碼
- -b: 只生成索引文件,不進入cscope的界面
- -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
- -k: 在生成索引文件時,不搜索/usr/include目錄
- -i: 如果保存文件列表的文件名不是cscope.files時,需要加此選項告訴cscope到哪兒去找源文件列表。可以使用”-“,表示由標准輸入獲得文件列表。
- -Idir: 在-I選項指出的目錄中查找頭文件
- -u: 掃描所有文件,重新生成交叉索引文件
- -C: 在搜索時忽略大小寫
- -Ppath: 在以相對路徑表示的文件前加上的path,這樣,你不用切換到你數據庫文件所在的目錄也可以使用它了。
|
cscope的一些命令如下
- s: 查找C語言符號,即查找函數名、宏、枚舉值等出現的地方
- g: 查找函數、宏、枚舉等定義的位置,類似ctags所提供的功能
- d: 查找本函數調用的函數
- c: 查找調用本函數的函數
- t: 查找指定的字符串
- e: 查找egrep模式,相當於egrep功能,但查找速度快多了
- f: 查找並打開文件,類似vim的find功能
- i: 查找包含本文件的文件
|
可以在.vimrc設置一個自動更新的快捷鍵
nmap <F5> :!find . -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' > cscope.files<CR> \ :!cscope -b -i cscope.files -f cscope.out<CR> \ :cs reset<CR>
|