您的位置:首页 > 运维架构

vim 中配置cscope功能

2012-12-14 11:33 183 查看
1.cscope的配置

vim配置文件vimrc.你可以修改/etc/vimrc使用所有用户都使用本配置文件,当然你还可以修改~/.vimrc下载配置文件:cscope_map.vim把cscope_map.vim里从ifhas("cscope")到endif里边的内容复制到/etc/vimrc里边去,如果找不到cscope_map.vim自己写进去,网上找下大概配置

先在~/vimrc中增加一句:
:setcscopequickfix=s-,c-,d-,i-,t-,e-
这个是设定是否使用quickfix窗口来显示cscope结果,用法在后面会说到。
跟Ctags一样,要使用其功能必须先为你的代码生成一个cscope的数据库,在项目的根目录运行下面的命令:

进入vim的vimrc所在路径

$cd/home/wooin/vim71/
$cscope-Rbq
#此后会生成三个文件
$llcscope.*
-rw-rw-r--1wooinwooin1.1M2007-09-3010:56cscope.in.out
-rw-rw-r--1wooinwooin6.7M2007-09-3010:56cscope.out
-rw-rw-r--1wooinwooin5.1M2007-09-3010:56cscope.po.out
#打开文件,开始Coding
$cdsrc
$vimain.c

进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来,用下面的命令:

:csadd/home/wooin/vim71/cscope.out/home/wooin/vim71

上面这条命令很重要,必须写全,不能只写前半句:
:csadd/home/wooin/vim71/cscope.out
因为源码是多级目录的,如果这样写,cscope是无法在子目录中的源码中工作的,当然,如果你的源码都在同一级目录中就无所谓了.如果你要经常用cscope的话,可以把上面那句加到~/.vimrc中去.

下面我们来操练一下,查找函数vim_strsave()的定义,用命令:

:csfindgvim_strsave

按下回车后会自动跳转到vim_strsave()的定义处.此时你肯定会说Ctags也可以做到这个呀,那么下面说的这个Ctags就无法做到了,我想查找vim_strsave()到底在那些地方被调用过了,用命令:

:csfindcvim_strsave

按下回车后vim会自动跳转到第一个符合要求的地方,并且在命令栏显示有多少符合要求的结果

如果自动跳转的位置你不满意,想看其他的结果,可以用下面的命令打开QuickFix窗口:

:cw

这时你就可以慢慢挑选了^_^

cscope的主要功能是通过同的子命令"find"来实现的
"cscopefind"的用法:
csfindc|d|e|f|g|i|s|tname

0或s

查找本C符号(可以跳过注释)

1或g

查找本定义

2或d

查找本函数调用的函数

3或c

查找调用本函数的函数

4或t

查找本字符串

6或e

查找本egrep模式

7或f

查找本文件

8或i

查找包含本文件的文件

如果每次查找都要输入一长串命令的话还真是件讨人厌的事情,Cscope的帮助手册中推荐了一些快捷键的用法,下面是其中一组,也是我用的,将下面的内容添加到~/.vimrc中,并重启vim:

nmap<C-_>s:csfinds<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>g:csfindg<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>c:csfindc<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>t:csfindt<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>e:csfinde<C-R>=expand("<cword>")<CR><CR>
nmap<C-_>f:csfindf<C-R>=expand("<cfile>")<CR><CR>
nmap<C-_>i:csfindi^<C-R>=expand("<cfile>")<CR>$<CR>
nmap<C-_>d:csfindd<C-R>=expand("<cword>")<CR><CR>

当光标停在某个你要查找的词上时,按下<C-_>g,就是查找该对象的定义,其他的同理.
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
<C-_>g的按法是先按"Ctrl+Shift+-",然后很快再按"g"

很奇怪,其中的这句:
nmap<C-_>i:csfindi^<C-R>=expand("<cfile>")<CR>$<CR>
在我的vim中无法工作,但是我改成:
nmap<C-_>i:csfindi<C-R>=expand("<cfile>")<CR><CR>
就可以正常工作了,不知道是什么原因?有哪位朋友知道请告诉我.

cscope的其他功能你可以通过帮助手册自己慢慢学习

reset:重新初始化所有连接。
用法:csreset

2.3、Cscope使用

  2.3.1、建立cscope使用的索引文件  2.3.1.1在你需要浏览源码的根目录下(如你想用cscope看linux源码)使用下面命令:  #:cscope-Rbkq<回车>  2.3.1.2R表示把所有子目录里的文件也建立索引  2.3.1.3b表示cscope不启动自带的用户界面,而仅仅建立符号数据库  2.3.1.4q生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度  2.3.1.5k在生成索引文件时,不搜索/usr/include目录  2.3.2、使用csfind查找[3](也可以简化写成csf)后面添加需要得字符串类型:  c:Findfunctionscallingthisfunction//查找调用本函数的函数  d:Findfunctionscalledbythisfunction//查找本函数调用的函数  e:Findthisegreppattern//查找egrep模式,相当于egrep功能,但查找速度快多了  f:Findthisfile//查找并打开文件,类似vim的find功能  g:Findthisdefinition//查找函数、宏、枚举等定义的位置,类似ctags的功能  i:Findfiles#includingthisfile//查找包含本文件的文件  s:FindthisCsymbol//查找C语言符号,即查找函数名、宏、枚举值等出现的地方  t:Findassignmentsto//查找指定的字符串  例如:使用cscope查找do_fork函数的定义,在vim命令行下执行:csfgdo_fork  2.3.3上面所有命令也可以配合按键及来实现  2.3.2.3.1Ctrl+\再按s表示:csfinds命令  2.3.1.3.2理实现csfind+g,d,c,t,e,f,i命令  2.3.2.4Cscope_map.vim说明:  2.3.2.4.1、有英文注释的我就不说明了,我就说一下里边的键map映射  2.3.2.4.2、如:nmap<C-\>s:csfinds<C-R>=expand("<cword>")<CR><CR>  2.3.2.4.2.1nmap表示在vim的普通模式下,即相对于:编辑模块和可视模式,以下是几种模式  :map普通,可视模式及操作符等待模式  :vmap可视模式  :omap操作符等待模式  :map!插入和命令行模式  :imap插入模式  :cmap命令行模式  2.3.2.4.2.2<C-\>表示:Ctrl+\s表示输入(即按:s)s  2.3.2.4.2.3:表示输入':'  2.3.2.4.2.4“csfinds"表示输入"csfinds"也即是要输入的命令  2.3.2.4.2.5<C-R>=expand("cword")总体是为了得到:光标下的变量或函数。cword表示:cursorword,类似的还有:cfile表示光标所在处的文件名吧  2.3.2.4.2.6就是回车吧,不太清楚





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: