使用Vim打造IDE--Cscope

本文介绍如何使用Cscope生成和查询代码数据库,包括设置Vim、快速定位代码定义及引用等功能,帮助开发者高效地管理和理解大型代码库。

原文:

http://blog.youkuaiyun.com/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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值