cscope可以看做是增强型的ctags,它把基于符号的操作发挥到极值。
使用cscope的工作场景主要包括:
类似ctags,在使用前首先需要建立项目符号数据库。在项目路径下运行:
cscope -Rbq
在当前路径下会生成三个数据库文件:cscope.in.out、cscope.out和cscope.po.out
使用VIM打开源码后需要引入cscope.out文件:
:cs add cscope.out文件的绝对路径 项目顶级目录的绝对路径
:cs find g main
:cs find s|g|d|c|t|e|f|i name
0 或 s 查找本 C 符号(可以跳过注释)
1 或 g 查找本定义
2 或 d 查找本函数调用的函数
3 或 c 查找调用本函数的函数
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件
配置vimrc如下:
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>
以后在VIM中,如果调用 cscope find g查找符号定义,只需要确保光饼定位到该符号上,绕后使用快捷键Ctrl+_+g组合键即可,按键方式为:
先同时按住Ctrl+Shift+_组合键,松开后再快速按g键。
如果感觉目标结果太多挡住了VIM的源码窗口,可以使用cscope的quickfix特性。
首先启用并配置scopequickfix选项:
:set cscopequickfix=s-,c-,d-,i-,t-,e-
:cw