一、ctags
"########################################
下载网址:http://ctags.sourceforge.net/
软件功能:用于产生一个tags文件(代码索引文件),
tags文件中记录的源文件的索引以帮助你快速得找到某个符号的定义。
它支持相当多的语言,如C、C++、C#、Shell等等。
后面所有的包括函数列表显示,变量定义跳转,自动补全等,都要依赖于它,
所以在此强烈推荐安装ctags插件。
安装配置:linux下,下载安装包,解压并安装。
$ tar -xzvf ctags-5.7.tar.gz
$ cd ctags-5.7
$ ./configure //亦可省略
# make
# make install //需要root权限
[配置]:可以在Normal Mode下,使用"set tags=.../tags"加载"tags"文件,也可以在_vimrc文件中做设置,后者举例:
set tags=~/usr/code/tags; //;号不能省略
set autochdir
常用命令:Ctrl+] 跳到声明定义处
Ctrl+T 跳回原处
(命令详情可参考上面的下载网址)
注意事项:
1), 先到源码目录(如果源码是多层的目录,就到最上层的目录,此处假设源码目录为D:/code/)下:
若是C, 运行命令" ctags -R * "以便产生tags文件,
若是C++运行命令" ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=c++ ",
在对C++文件进行补全时,OmniCppComplete插件需要tag文件中包含C++的额外信息,因此上面的ctags命令不同于以前我们所使用的,
它专门为C++语言生成一些额外的信息,上述选项的含义如下:
--c++-kinds=+p : 为C++文件增加函数原型的标签
--fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
下表是我的vimrc中设置的键绑定,使用pumvisible()来判断下拉菜单是否显示,如果下拉菜单显示了,键映射为了一个值,如果未显示,又会映射为另一个值。
" mapping
inoremap <expr> <CR> pumvisible()?"\<C-Y>":"\<CR>"
inoremap <expr> <C-J> pumvisible()?"\<PageDown>\<C-N>\<C-P>":"\<C-X><C-O>"
inoremap <expr> <C-K> pumvisible()?"\<PageUp>\<C-P>\<C-N>":"\<C-K>"
inoremap <expr> <C-U> pumvisible()?"\<C-E>":"\<C-U>" 上面的映射都是在插入模式下的映射,解释如下:
如果下拉菜单弹出,回车映射为接受当前所选项目,否则,仍映射为回车;
如果下拉菜单弹出,CTRL-J映射为在下拉菜单中向下翻页。否则映射为CTRL-X CTRL-O;
如果下拉菜单弹出,CTRL-K映射为在下拉菜单中向上翻页,否则仍映射为CTRL-K;
如果下拉菜单弹出,CTRL-U映射为CTRL-E,即停止补全,否则,仍映射为CTRL-U;
2), 在_vimrc文件内设置"tags"文件所在目录,或者如果经常在这个工程编程的话,也可以将"tags"文件所在目录写到_vimrc文件中,这样VIM才能找到"tags"文件,
设置"tags"文件路径命令是:
set autochdir
set tags=code1/tags;
set tags=code2/tags;
注意tags项设置的目录后面的分号是必不可少的。因为它会让vim首先在当前目录里寻找tags文件,
如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归。
3), 上面两点做到后,以gvim打开源代码, ctags即便生效。
因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。
4),这里有一个小瑕疵,你修改程序后,比如增加了函数定义,删除了变量定义,tags文件不能自动rebuild,你必须手动再运行一下命令":ctags -R"使tags文件更新一下。
5),tags目录如果数量多可以做成脚本,由_vimrc加载进来:
:if getfsize(".vimscript")>0
source .vimscript
:endif
编辑.vimscript文件,加入如下代码:
:set tags=/home/src/tags
6),当ctags使用ctags -R的命令,总是只能打出c的tag,但是c++的tag不能打出来
二、cscope
"########################################
下载网址: http://cscope.sourceforge.net/
软件功能: 用Cscope自己的话说:"你可以把它当做是超过频的ctags", 其功能和强大程度可见一斑吧。
cscope据说诞生就是为了来替代ctags的,因为他有着比ctags更加强大的功能,举个例子,
ctags只能分析出这个函数在哪里被定义,而cscope除了这一点之外,还能分析出这个函数再哪里被调用。
当然cscope目前还是有不少bug的,但是也不影响我们的使用。
安装配置:[安装]: 同ctags一样,需要安装。
# ./configure
# make
# make install
使用:
如果只希望 Cscope 关联起所有的 .c 文件,那么可以直接到工程的根目录下,输入:
$ cscope -Rbq
-R 表示递归地把所有子文件夹中的 source file 也关联进来
-b 表示只建立数据库文件 cscope.out,不进入 Cscope 的 GUI 界面
-q 会建立两个额外的 'inverted index' file: cscope.in.out 和 cscope.po.out,以加快查找的速度
如果不希望把 /usr/include 中被工程文件包含的 .h 文件关联进来,就加 -k
如果要关联其他类型的文件(如 .cpp、.java等),就需要我们自己先生成一个 cscope.files,把所有我们希望关联进去的文件都列在里面:
$ find /home/edelweiss/nbd/nbd-2.9.15/ -name '*.c' -o -name '*.cpp' -o -name '*.h' \
> /home/edelweiss/cscope.files
注意查找的路径一定要写成绝对路径,这样才能保证写入到 cscope.files 文件中的也是绝对路径。
之后就可以根据 cscope.files 建立数据库了:
$ cscope -bq -i /home/edelweiss/cscope.files
如果生成数据库文件后,工程中的代码有所改动,最好重新生成一次那三个文件,否则查找結果可能与实际不匹配。
查看代码时常用的快捷键是 Ctrl+\ s(按住 Ctrl 不放,同时按 \,然后全部松开,按 s)。将光标放到想要查看所有出现位置的 C Symbol 上,按下上述快捷键,屏幕下方就会出现一个列表,输入序号并回车就能到达想去的地方。按下 Ctrl+t 可回到搜索前的位置。
直接在命令行查找可输入 “:cs f s symbol_name”
其他用法可以输入 “:cs” 查看或者参阅 manpage 和官网上的 Vim/Cscope Tutorial。
"########################################
三、安装可能产生的错误:
http://sourceforge.net/projects/cscope/files/
下载 Cscope 最新版 15.7a(cscope-15.7a.tar.bz2)直接编译安装
如果 make 时出现“curses.h not found”之类的错误,则需要先安装“libncurses-dev”包
之后回到安装目录
make clean
make distclean
再make