安装 ctags、cscope 这俩个插件是:
$ sudo apt-get install ctags cscope
习惯这样创建索引文件:
把这个命令写成shell脚本放到/usr/bin下。
1、用vim + ctags
a 首先我们必需给要阅读的原始码建一个或多个tags文件,
在shell下利用ctags命令给单个文件建立tags如下:
$ ctags filename.c
要给同一个目录下的所有文件建立tags如下:
$ ctags -R
这时在tags文件所在的目录下打开源文件阅读,vim就会自动调用tags文件。
如果tags文件不在当前目录下,能在命令模式下用下面的命令设置tag文件:set tag=tag_file_path
但是一般对我来说tags都在当前目录下,所以我习惯于在~/.vimrc中加入:
:set tags=$PWD/tags
b 要在vim下跳到一个函数的定义处能在命令模式下用下面的命令:
:tag fuction_name
这个命令将把你带到fuction_name函数的定义处。
这个功能十分有用,以前一直没有注意。
c 另外,ctrl + ]命令会把当前光标下的单词作为tag的名字,并直接跳转。
用ctrl + t命令能回到前一个tag,你能在ctrl + t前面加一个数字表示往回跳
的层数。
d 使用Ctrl + g能显示当前正在编辑的文件名,及所在的行号。
如果源文件的排版比较乱的话,能通过命令gg=G来格式化整个源文件。
2、cscope
在使用cscope之前需要先生成一个数据库
a 生成索引文件:
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,这样,你不用转换到你数据库
文件所在的目录也能使用他了。
如果你的源码中只含有.c,.h文件,你能直接使用
$ cscope -Rbq
在使用cscope之前需要先生成一个数据库,你可以使用cscope-indexer(如果多个
目录你可以使用-R选项),它会在当前目前下生成一个cscope.files的文件,这个文
件包含了cscope需要生成索引的全部文件,因为cscope-indexer不会自动查到.cpp,.S
后缀的文件,因此最后使用find来生成cscope.files文件:
$ find ./ -name “*.c” -or -name “*.h” -or -name “*.cpp” > cscope.files
上面的命令会把当前目录下所有.c,.h,.cpp文件列出并写入cscope.files文件中。
接着使用cscope -Rbq来生成索引引。
$ cscope -Rbq
一般使用方法:
$ find ./ -name "*.c" -or -name "*.h" -or -name "*.cpp" -or -name "*.S" | cscope -Rbq
b 接着你就能使用vim来打开一个文件来浏览编辑代码了。
想查看cscope的使用方法最好的办法是在vim中输入:
:cs help
这里还是稍稍说明一下:
s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文
例如平常最常用的查询那个函数调用了函数func():
:cs f c func
或
:cs find c func
上两幅效果图:
这个是自动补全:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/hongmy525/EntryImages/20081030/Screenshot.png)
下面这个是函数参数提示:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/hongmy525/EntryImages/20081030/Screenshot-1.png)
有朋友讨论大小写忽略:
这里截图大小写忽略:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/hongmy525/EntryImages/20081204/Screenshot-.vimrc%20%28~%29%20-%20VIM.png)
配置到这,无论是用vim来编程还是用来阅读源码都基本够用了