【Vim使用】4.cscope

本文介绍cscope工具的基本概念及其在代码导航方面的应用。cscope是一款强大的代码搜索工具,支持符号查询、函数调用追踪等功能。文章详细解释了如何配置及使用cscope进行高效的代码检索,并提供了具体的命令实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.cscope简介

cscope是加强版的ctags不仅支持变量/函数的定义查询,还记录了函数的调用/查询等功能,有说其诞生是为了取代ctags,但是无从考究,直觉的好用就可以了

它被设计用来回答以下的问题:                                                                                                          
 49        什么地方用到了这个符号?---------------symbol  
 50        这是在什么地方定义的?-----------------definition
 51        这个变量在哪里被赋值?
 52        这个全局符号的定义在哪里?
 53        这个函数在源文件中的哪个地方?
 54        哪些函数调用了这个函数?---------------call
 55        这个函数调用了哪些函数?---------------
 56        信息 "out of space" 从哪来?
 57        这个源文件在整个目录结构中处于什么位置?
 58        哪些文件包含这个头文件?

2.cscope使用

1.建立cscope索引目录:

原理跟ctags是类似的,可以说cscope>ctags,同样是生成一个数据库,这个可以直接进入工程项目(假如在VIM74的源码中)的根目录执

cscope -Rbq           执行该命令以后会生从三个文件
-rw-rw-r--  1 thinkpad thinkpad  958464  212 22:50 cscope.in.out
-rw-rw-r--  1 thinkpad thinkpad 7618461  212 22:50 cscope.out
-rw-rw-r--  1 thinkpad thinkpad 5977128  212 22:50 cscope.po.out
2.在源码根目录下打开任意文件,使用下面的命令:(在这里说一下为何是根目录下,打开文件(即.c等文件),因为cscope在根目录下面生有的索引目录,子菜单无法实现检索,如果你在子菜单进行下面的命令,都会提示cscope无法连接。) 

thinkpad@thinkpad:cd ~/Files/vim74/src   &&  vi main.c如此打开,然后运行:cs find g vim_main2 结果如下E567:没有cscope连接

thinkpad@thinkpad:cd ~/Files/vim74 && vi src/main.c正确连接

cs find s ----查找C语言符号,即查找函数名、宏、枚举值等出现的地方  !!!

cs find g ----查找函数、宏、枚举等定义的位置,类似ctags所提供的功能 !!!

cs find d ----查找这个函数调用的函数 !!

cs find c ----查找调用该函数的函数 !!

cs find t: ----查找指定的字符串

cs find e ----查找egrep模式,相当于egrep功能,但查找速度快多了

cs find f ----查找并打开文件,类似vimfind功能

cs find i ----查找包含本文件的文

映射如下:

:set cscopequickfix=s-,c-,d-,i-,t-,e-

3.vimrc如下设置

"config cscope 
 44 if has("cscope")
 45   set csprg=/usr/bin/cscope
 46   set csto=1
 47   set cst
 48   set nocsverb
 49 "   add any database in current directory
 50   if filereadable("cscope.out")
 51       cs add cscope.out
 52   endif
 53   set csverb
 54 endif
 55 :set cscopequickfix=s-,c-,d-,i-,t-,e-
 56 nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>                                                                                       
 57 nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR> 
 58 nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR> 
 59 nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR> 
 60 nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR> 
 61 nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR> 
 62 nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
 63 nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值