VIM 之 cscope

转自:http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

http://cscope.sourceforge.net/

可以使用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

原文地址:https://www.cnblogs.com/hojor/p/3270607.html