组合介绍
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的索引文件:
这个命令会生成三个文件: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命令行下执行:
在vim命令行下执行:
s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文
2,使用cscope查找do_fork函数的定义:
在vim命令行下执行:
三,在VIM中使用cscope快捷键:
四,在VIM中使用tags查找符号:
在vim命令行下执行:
即可找到你想找的函数或是数据结构或是函数xxx
关于tags的其它用法可以在vim中执行”:help tags”命令进行查询。
五,其它命令介绍:
ctrl+]:在函数调用的地方跳转到函数定义的地方
ctrl+t:返回上一个查找的地方
六,特别注意:
所生成的cscope.out和tags文件要在打开VIM所在的文件夹,否则VIM无法找到相关符号信息。