vim cscope java_在Vim(gvim)中使用cscope | Vimer的程序世界

之前已经详细的介绍了在vim中使用ctags,这篇文章我们就来详细介绍一下如何在vim中使用cscope。

首先,我们还是了解一下什么是cscope。简单来讲,cscope主要用来协助浏览C/C++语言,他的功能要强大于ctags,不仅支持变量/函数的定义查询,还记录了函数的调用处查询等功能,所以也有说法称cscope的诞生就是为了取代ctags。无论这个说法是否有据可依,对使用方来说,当然是希望功能越强大方便越好啦,所以这也是我们为什么讲ctags和cscope都装上的原因啦。

第二,我们来说一下vim的支持。cscope没有ctags那么幸运,cscope在大部分的linux下的vim中是没有提供支持的(但是在windows下的gvim都提供了支持),所以,如果你打算要在linux下面使用vim+cscope,那么1,你要下载安装cscope。2,你要重新编译vim,加上支持选项:

--enable-cscope

当然,cscope也提供了windows版(否则windows下gvim怎么和cscope搭配嘛……),分别下载地址如下:

cscope(linux):http://cscope.sourceforge.net/

cscope(windows):http://sourceforge.net/projects/mslk/files/

当然,安装的最后一步就是,不要忘记讲cscope放进的环境变量里!

第三,好了,假设你已经搭建好了vim+cscope的环境,那么现在就是我们学习怎么用的时候了

function Do_CsTag()

if(executable('cscope') && has("cscope") )

if(g:iswindows!=1)

silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"

else

silent! execute "!dir /b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"

endif

silent! execute "!cscope -b"

if filereadable("cscope.out")

execute "cs add cscope.out"

endif

endif

endf

调用这个函数就可以用cscope生成数据库,并添加到vim中,具体每个命令意义如下:

if(g:iswindows!=1)

silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"

else

silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs > cscope.files"

endif

上面的函数,通过操作系统的不同,用不同的命令实现,将当前目录的源码文件导入到一个叫做cscope.files的文件中。这个文件是cscope用来生成数据库时的默认存储文件列表的文件。

不理解dir命令?看看这篇文章吧

silent! execute "!cscope -b"

这个命令就是csope在生成数据库,你会发现生成了一个cscope.out的文件,这个就是生成数据库,实际上如果加上参数-q来加快索引速度的话,还会生成cscope.in.out, cscope.po.out这两个文件,各个参数意义如下:

-b : 默认情况下,cscope在生成数据库后,会进入cscope自己的界面,我们在vim中使用他,当然不希望有这样的界面,就可以用-b来屏蔽掉。

execute "cs add cscope.out"

最后这一步,就是在vim中添加了cscope.out这个数据库。

下面列出cscope的常用生成数据库选项:

-R: 在生成索引文件时,搜索子目录树中的代码,因为我们已经在cscope.files中把所有的文件都打印入了列表中,所以

-b: 只生成索引文件,不进入cscope的界面

-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

-k: 在生成索引文件时,不搜索/usr/include目录

-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。

-I dir: 在-I选项指出的目录中查找头文件

-u: 扫描所有文件,重新生成交叉索引文件

-C: 在搜索时忽略大小写

-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

好了,到了这里,cscope的原理大家应该都清楚了,那么在vim中怎么使用呢?

"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    查找包含本文件的文件

但是谁也不想敲这么多命令吧,所以我在vimrc中建了这样一个映射:

nmap s :cs find s =expand(""):copen

nmap g :cs find g =expand("")

nmap c :cs find c =expand(""):copen

nmap t :cs find t =expand(""):copen

nmap e :cs find e =expand(""):copen

nmap f :cs find f =expand(""):copen

nmap i :cs find i ^=expand("")$:copen

nmap d :cs find d =expand(""):copen

实际上就是参考 cscope_maps.vim这个文件,大家可以去下载他,然后直接放到plugin目录就行。

最后,我们来说一下cscope和ctags的兼容问题。我在vimrc中配置了一段代码:

if has("cscope")

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

set csto=0

set cst

set csverb

endif

官方解释如下:http://vimcdoc.sourceforge.net/doc/if_cscop.html

简单来说,主要功能就是同时搜索ctags和cscope的标签,并且cscope优先扫描。

好啦,在vim(gvim)中使用cscope的介绍就到这里啦,有兴趣的朋友可以赶紧试一下啦~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值