首先自然是安装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 s :cs find s =expand(" ") nmap g :cs find g =expand(" ") nmap c :cs find c =expand(" ") nmap t :cs find t =expand(" ") nmap e :cs find e =expand(" ") nmap f :cs find f =expand(" ") nmap i :cs find i ^ =expand(" ") $ nmap d :cs find d =expand(" ") 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> |