vim插件之cscope

1、生成cscope数据库
在代码根目录运行下面的命令:
cscope -option
常用命令是cscope -Rbq 

这个命令会生成cscope.out, cscope.in.out,cscope.po.out文件,cscope.out是基本的符号索引,后两个文件是使用”-q“选项生成的文件。

下表中列出了cscope的常用选项:

•-R: 在生成索引文件时,搜索子目录树中的代码
•-b: 只生成索引文件,不进入cscope的界面。如果已经进入了这个界面,按CTRL-D退出。
•-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度。在windows上使用cscope时,你可能会遇到-q选项被忽略的提示,解决办法请看这篇文章:Windows下cscope -q选项出错的解决。
•-k: 在生成索引文件时,不搜索/usr/include目录
•-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”–“,表示由标准输入获得文件列表。
•-Idir: 在-I选项指出的目录中查找头文件
•-u: 扫描所有文件,重新生成交叉索引文件
•-C: 在搜索时忽略大小写
•-Ppath: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y),虽然它也可以支持C++以及Java,但它在扫描目录时会跳过C++及Java后缀的文件。如果你希望cscope解析C++或Java文件,需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。通常我们使用find来生成cscope.files文件:
cd ~/src
find . –type f > cscope.files
cscope -bq 

这条命令把~/src目录下的所有普通文件都加入了cscope.files,这样,cscope会解析该目录下的每一个文件。上面的cscope命令并没有使用”-R“参数递归查找子目录,因为在cscope.files中已经包含了子目录中的文件。

注意:find命令输出的文件以相对路径表示,所以cscope.out的索引也相对于当前路径。如果你要在其它路径中使用当前的cscope.out,需要使用-P选项。
要在vim中使用cscope的功能,需要在编译vim时选择”+cscope“。vim的cscope接口先会调用cscope的命令行接口,然后分析其输出结果找到匹配处显示给用户。
2、vim中添加或删除cscope数据库
(1)添加cscope链接
    可以在.vimrc文件中做这件事,或者在Vim启动之后手动地做。
add命令用于增加一个新的cscope数据库/链接库,使用方法:

:cs add {file|dir} [pre-path] [flags]

pre-path,以-p选项传递给cscope的文件路径,给相对路径表示的文件加上的path,这样不需要切换到数据库文件所在的目录就可以使用它了。
flags 是传递给cscope的附加参数。
(2)删除cscope链接

 kill命令用于杀掉cscope链接,使用方法:

              :cs kill {num|partial_name}
 为了杀掉一个cscope链接,那么链接数字或者一个部分名称必须被指定。部分名称可以简单的是cscope数据库文件路径的一部分。要特别小心使用部分路径杀死一个cscope链接。假如指定的链接数字为-1,那么所有的cscope链接都会被杀掉。

 (3)其它命令

  reset用于重新初始化所有的cscope链接,使用方法:

              :cs reset
 
show:显示cscope的链接,使用方法:

              :cs show
如:
:cs add cscope.out

可以通过执行”:cs show”来再次检查以上执行的结果。这将会产生如下的输出:

# pid      database name      prepend path

0 11453    cscope.out         <none>

提示:
由于微软的RTL限制,Win32版本会显示0而不是真正的pid。

3:查找标签
(1)快捷键
   使用Ctrl+]可以直接查找光标下的标签,通过Ctrl+t/o可以返回到上一个标签。
(2):ctags tagname
(3)find命令
		cs[cope] find option Name:

	•s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
	•g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
	•d: 查找本函数调用的函数
	•c: 查找调用本函数的函数
	•t: 查找指定的字符串
	•e: 查找egrep模式,相当于egrep功能,但查找速度快多了
	•f: 查找并打开文件,类似vim的find功能
	•i: 查找包含本文件的文件

如果出现找出多个函数声明和定义的情况,可以使用quickFix窗口进行选择切换:
   :cw

4、建议的用法
       将如下内容放置到.vimrc中:
       if has("cscope")
              set csprg=/usr/local/bin/cscope
              set csto=0
              set cst
              set nocsverb
              " add any database in current directory
              if filereadable("cscope.out")
                  cs add cscope.out
              " else add database pointed to by environment
              elseif $CSCOPE_DB != ""
                  cs add $CSCOPE_DB
              endif
              set csverb
       endif
	   
	nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
    nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
    nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
    nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
    nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
    nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<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> :copen<CR><CR>
	
	
	


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值