之前一直使用vim+ctags+cscope来弄c的代码,最近看同事使用gtags,觉得在搜索方面要高级很多,网上大多都是emacs+gtags的资料,而vim的则比较少,这里搞通了之后,做个记录。
1.下载、安装 global
wget http://tamacom.com/global/global-6.6.2.tar.gz
tar xzvf global-6.6.2.tar.gz
cd global-6.6.2
./configure
make && make install
2.将生成的文件拷贝到.vim对应的目录
cp gtags-cscope.vim gtags.vim ~/.vim/plugin/
(我没有使用vbundle安装插件,因此直接拷贝到了plugin目录)
3.在代码的根目录中执行
cd ~/postgresql-10.1
gtags
会生成几个文件:GPATH GRTAGS GTAGS
4.在.vimrc中添加gtags配置
set cscopetag " 使用 cscope 作为 tags 命令 set cscopeprg='gtags-cscope' " 使用 gtags-cscope 代替 cscope "gtags.vim 设置项 let GtagsCscope_Auto_Load = 1 let CtagsCscope_Auto_Map = 1 let GtagsCscope_Quiet = 1
(即使添加这些,我的cscope和ctags还是照样可以使用)
5.打开代码,可以使用了,但是效果和emacs还是有点不一样:
1)在根目录中,可以查找某个函数,然后打开文件
root@seg01 postgresql-10.1]# global -x pg_parse_query pg_parse_query 596 src/backend/tcop/postgres.c pg_parse_query(const char *query_string)
2)打开文件
[root@seg01 postgresql-10.1]# vim src/backend/tcop/postgres.c
3)使用Gtags查找:Gtags pg_parse_query(这里会自动补全,使用tab键)
结果显示在quickfix中,多条结果可以用鼠标来点击,或者cn下一条,cp上一条来选择
6.其他几个使用说明
01.Gtags func:查看定义处 02.Gtags -r func:查看引用处 03.Gtags -s text:查看未被数据库定义的tags 04.copen:打开quick fix显示窗口 05.cclose:关闭quick fix显示窗口 06.cn:下一项 07.cp:上一项 08.cl:列出查询到的相关项 09.ccN:到列表中第N个符号处 10.Gtags -g pattern:搜索pattern指定的字符串 11.Gtags -gie -pattern:-e选项可以用于搜索’-‘字符,但是基础搜索,没有元字符,-i选项忽略大小写,类似于grep的选项 12.GtagsCuorsor:取决于光标位置,要是在定义处,查询其引用,要是在引用处,跳转至其定义处,否则就是Gtags -s命令 13.Gtags -P text:查询包含text的路径名,Gtags -P后接/dir/为列出叫做dir目录下文件,后接.h$列出所有的include文件 14.Gtags -f file:列出file里的符号,Gtags -f %则列出当前文件的符号
7.在之前ctags+cscope中,查找定义和查找使用都很方便,但是有时候是找不到目标的···
有一种情况最不好找了,一个函数记得一部分名称,没法搜索到,但是用gtags后就好搜索了,会自动补全。
8.cscope中常用的几个命令:
cs find s : 查找符号,会显示列表出来
cs find g :查找定义
cs find c: 查找调用本函数的函数
cs find c: 查找本函数调用的函数
cs find t:查找本字符串
9.使用vimgrep也有局限性,只能查找具体的文件,不能自动查找所有的子目录。
配好之后感觉还是很爽的,这样查找起来方便很多。