vim+cscope使用详解

windows下流行的源码阅读软件是source insight,而linux则没有与其可匹敌图形化的源码阅读软件,现在日趋流行的eclipse开发软件,虽然可以较好的支持源码中符号之间相互跳转,但总体感觉不是十分强大和好用,可能因为eclipse是通过cdt插件的形式来支持c/c++项目,很多方面表现还有待提高。而且eclipse在终端下无法使用,而今天的主角vim+ctags+cscope可谓是无所不能,真真的强大之极。下面是关于这个组合配置和使用的简单介绍,更多的功能可以日后慢慢摸索。 


组合介绍 

vim是linux超强的文本编辑器。 

ctags对源代码文件扫描生成交叉引用符号表,支持大多数主流语言,但相对功能简单,配合vim可以实现从变量和函数的调用点到定义点的跳转。 

cscope可以理解为ctags的加强版,但支持语言的种类要少一些,完全支持c语言。它生成的源码符号引用表更加复杂,配合vim可以实现符号各引用点之间任意切换(比如从函数调用点到定义点,从定义点到调用点等)。 

关于更多的vim,ctags和cscope的知识可以去它们的官网,也可以查看man手册了解一些基本的使用信息和帮助。 

一、准备 

1、下周地址vim ctags 在chinaunix下载 
2、cscope在sourceforge.net中下载 
3、下载后解压安装./configure;make;make install 

二、配置 

vim 

为了使vim更好支持浏览和编写程序代码,可以启用一些默认没有启用vim的扩展功能,如显示行号,代码自动缩进等。 

#vim /etc/vimrc 

#增加此行默认将开启vim行号显示功能 

set number 
set sw=4 
#自动缩进的时候, 缩进尺寸为 4 个空格。 
set ts=4 
#Tab 宽度为 4 个字符。 
set sm 
#显示括号配对情况。 打开这个选项后, 当输入后括号 (包括小括号、中括号、大括号) 的时候, 光标会跳回前括号片刻, 然后跳回来, 以此显示括号的配对情况。 
set cin 
#打开 C/C++ 风格的自动缩进。 打开了自动缩进后, 在编码的时候我们可以使用“V”命令选中一段文本后, 按“=”将这段文本重新调整缩进格式, 在一定程度上起到代码美化的作用。 
#在粘贴的时候把所有自动缩进都关闭, 粘贴完毕之后再打开。 一个个手工关闭自动缩进未免过于繁琐, vim 为我们提供了一个很好用的命令,只要输入“:set paste”, 就可以关闭所有自动缩进。 粘贴完毕后再输入“:set nopaste”就可以重新打开原有的自动缩进设置了。 


vim使用:使用ctrl+z跳出vim,进入命令行执行相应的shell后在fg进入刚才的vim。




CSCOPE使用方法


一,一般源文件中生成索引文件

为了方便使用,编写了下面的脚本来更新cscope和ctags的索引文件:

#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R


这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。

其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。

这个脚本,首先使用find命令,查找当前目录及子目录中所有后缀名为".h", ".c"和".c"的文件,并把查找结果重定向到文件cscope.files中。

然后cscope根据cscope.files中的所有文件,生成符号索引文件。最后一条命令使用ctags命令,生成一个tags文件,

在vim中执行":help tags"命令查询它的用法。它可以和cscope一起使用。上面所用到的命令参数,含义如下:

-R: 在生成索引文件时,搜索子目录树中的代码

-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,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

二,在VIM使用cscope查找

1,加载cscope.out文件
在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。

VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”,

回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs find s work”,查找这个符号出现的位置,

现在vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,

这类似于egrep程序的功能。在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.在vim命令行下执行:

:cs add cscope.out

在vim命令行下执行:

:cs help
cscope commands:
add  : Add a new database             (Usage: add file|dir [pre-path] [flags])

find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)
       c: Find functions calling this function
       d: Find functions called by this function
       e: Find this egrep pattern
       f: Find this file
       g: Find this definition
       i: Find files #including this file
       s: Find this C symbol
       t: Find assignments to
help : Show this message              (Usage: help)
kill : Kill a connection              (Usage: kill #)
reset: Reinit all connections         (Usage: reset)
show : Show connections               (Usage: show)


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

2,使用cscope查找do_fork函数的定义:

在vim命令行下执行:

:cs f g do_fork

三,在VIM中使用cscope快捷键:

下面是我的.vimrc的配置,在该配置下,在使用vim打开文件时,默认加载当前目录下的cscope.out文件,如果没有的话就得用cs add命令手动加载了。

另外也映射了查找的快捷键,如先按ctrl+\键,然后再按g键,将查找当前光标下关键字的定义出。
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
set csprg=/usr/bin/cscope
set csto=1
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif
 

 

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>

四,在VIM中使用tags查找符号:

在vim命令行下执行:

:tag xxx

即可找到你想找的函数或是数据结构或是函数xxx

关于tags的其它用法可以在vim中执行”:help tags”命令进行查询。

五,其它命令介绍:

ctrl+]在函数调用的地方跳转到函数定义的地方
ctrl+t:返回上一个查找的地方

六,特别注意:

所生成的cscope.out和tags文件要在打开VIM所在的文件夹,否则VIM无法找到相关符号信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值