1、Cscope介绍
Cscope是类似于ctags一样的工具,但可以认为她是ctags的增强版,因为她比ctags能够做更多的事。在Vim中,通过cscope的查询,跳转到指定的地方就像跳转到任何标签;她能够保存标签栈,所以通过合适的键盘映射绑定,你能够在函数向后或向前跳转,就像通常使用的tags一样。
首次使用Cscope时,他会根据源文件生成符号数据库。然后在以后的使用中,cscope只是在源文件有改动或源文件列表不同时才会重建数据库。当在重建数据库时,未改动过的文件对应的数据库信息会从旧的数据库中拷贝过来,所以会使重建数据库快于一开始的新建数据库。
当你在命令行下调用cscope时,你会获得一个全屏选择窗口,能够使你查询特定的内容。然而,一旦你查询的有匹配,那么就会用你默认的编辑器来编辑该源文件,但是你不能够简单的使用Ctrl+]或者:tag命令来从一个标签跳转到另一个标签。
Vim中的cscope接口是通过以命令行形式调用完成的,然后解析查询返回的结果。最终的结果就是cscope查询结果就像通常的tags一样,这样你就可以*跳转,就像在使用通常的tags(用ctrl+]或者:tag跳转)
2、Cscope安装
apt-get install cscope
或者在网站下载
3、Cscope配置
修改vim配置文件vimrc.你可以修改/etc/vimrc使用所有用户都使用本配置文件,当然你还可以修改~/.vimrc
将如下内容放置到你的.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
通过设置’cscopetag’,我们已经有效的将所有:tag的情况都替换为:cstag。这包括:tag、ctrl+],和”vim -t”。然后,正常的tag命令就会不光在tag文件中查找,也会在cscope数据库中查找。
注:
遇到错误
cs_read_prompt EOF: 没有那个文件或目录E609: Cscope 错误: sh: 1: exec: /usr/local/bin/cscope: not found
则将第二行注释即可,即 " set csprg=/usr/local/bin/cscope
一些经常用cscope查找(使用”:cs find”)是查找调用某一特定函数的所有函数,和查找所有出现特定C符号的地方。为了做这些事,你可以使用如下的键盘映射作为例子:
map g<C-]> :cs find 3 <C-R>=expand(“<cword>”)<CR><CR>
map g<C-/> :cs find 0 <C-R>=expand(“<cword>”)<CR><CR>
这些给ctrl+](右中括号)和ctrl+/(反斜杠)的映射可以允许你将光标放置到函数名称或者C符号上然后执行快速cscope查找匹配。
你可以使用如下方案(很好用,可以将其添加到.vimrc中):
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>
3、Cscope索引
建立cscope使用的索引文件
1. 在你需要浏览源码的根目录下(如你想用cscope看linux源码)使用下面命令:
2. * #: cscope -Rbkq<回车>
3. R 表示把所有子目录里的文件也建立索引
4. b 表示cscope不启动自带的用户界面,而仅仅建立符号数据库
5. q生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
6. k在生成索引文件时,不搜索/usr/include目录
然后在~/vimrc中增加一句:
:setcscopequickfix=s-,c-,d-,i-,t-,e- |
跟Ctags一样, 要使用其功能必须先为你的代码生成一个cscope的数据库, 在项目的根目录运行下面的命令
:csadd /home/wooin/vim71/cscope.out /home/wooin/vim71
源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了.如果你要经常用cscope的话, 可以把上面那句加到~/.vimrc中去.
更多cscope命令可打开一个vim文件中查看
help :显示一个简短的摘要。
使用方法:
:cs help
后续补充说不定会更新。。。