原文:
http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx
偶的贡献是整理成符合自己格式的~
可以使用Cscope完成如下功能:
查看一个函数在哪里被调用
查看变量在哪里被使用
查看一个函数调用了哪些函数
检查改动,例如增加一个枚举,会产生什么影响
检查所有的地方都进行了相应修改,例如给一个函数增加参数
在所有文件中对一个全局变量进行改名
源文件在目录中的位置
哪些文件包含这个头文件
Cscope地址:
http://cscope.sourceforge.net
解压后编译安装:
# ./configure # make # make install |
之后,在~/vimrc中增加如下一行:
:set cscopequickfix=s-,c-,d-,i-,t-,e- |
这个用以设定是否使用quickfix 窗口来显示cscope的结果,quickfix请参看另一篇文章。
与Ctags类似,要使用Cscope必须先为源代码生成一个cscope数据库,。
在项目的根目录运行下面的命令:
# cd /home/zebra/myprogram/src # cscope -Rbq # 这样会生成三个文件 # 打开文件, 开始Coding # cd src # vi mymain.c |
进入vim后需要把生成的cscope文件导入到vim中来,用下面的命令:
:cs add /home/zebra/myprogram/src/cscope.out /home/zebra/myprogram/src |
必须把两级中的cscope文件都加入。因为源码是多级目录的,仅仅具有前一个,cscope无法在子目录的源码中正确工作。
当然,如果你的源码都在同一级目录中就没关系了。
如果经常用cscope,可以把上述加入到~/.vimrc。
其一般使用如下:
:cs find g mymain 查看跳转到定义处
:cs find g mymain 查看引用情况,按下回车则调转到第一个引用处。
如果对跳转结果不满意,使用:
:cw 打开quickfix窗口进行挑选。
cscope的主要功能是通过子命令"find"实现。
cs find c|d|e|f|g|i|s|t name
0 或 s | 查找本 C 符号(可以跳过注释) |
1 或 g | 查找本定义 |
2 或 d | 查找本函数调用的函数 |
3 或 c | 查找调用本函数的函数 |
4 或 t | 查找本字符串 |
6 或 e | 查找本 egrep 模式 |
7 或 f | 查找本文件 |
8 或 i | 查找包含本文件的文件 |
查找都要输入长串命令的话非常不方便,Cscope的帮助手册中推荐了一些快捷键的用法。
下面是其中一组,也是常用的。
将下面的内容添加到~/.vimrc中, 并重启vim即可:
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>
这样,当光标停在某个你要查找的词时, 按下<C-_>g,就会跳转到该对象的定义。其它的类似。
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态,可以如下解决:
<C-_>g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"。
使用reset重新初始化所有连接 ,用法:
cs reset