在Vim中使用gtags
之前一直使用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配置
1 2 3 4 5 6 7 8 | 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)在根目录中,可以查找某个函数,然后打开文件
1 2 | 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)打开文件
1 | [root@seg01 postgresql-10.1]# vim src/backend/tcop/postgres.c |
3)使用Gtags查找:Gtags pg_parse_query(这里会自动补全,使用tab键)
结果显示在quickfix中,多条结果可以用鼠标来点击,或者cn下一条,cp上一条来选择
6.其他几个使用说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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也有局限性,只能查找具体的文件,不能自动查找所有的子目录。
配好之后感觉还是很爽的,这样查找起来方便很多。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架