在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配置
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也有局限性,只能查找具体的文件,不能自动查找所有的子目录。
配好之后感觉还是很爽的,这样查找起来方便很多。
在Vim中使用gtags的更多相关文章
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- 再谈vim中多窗口的编辑
参考:http://blog.csdn.net/shuangde800/article/details/11430659 很好 鼠标在各个窗口间循环移动: ctrl+w+(小写的 hjkl), &qu ...
- 在VIM中进行快速的查找和替换
VIM是被誉为非常高效的文本编辑软件.但是掌握并高效的使用是件有难度的事情.在VIM中进行快速的查找和替换是提高VIM使用效率的重要方法.下面是我在阅读VIM用户手册时整理的一些资料: 行内搜索. f ...
- vim中替换命令
在VIM中进行文本替换: 1. 替换当前行中的内容: :s/from/to/ (s即substitude) :s/from/to/ : 将当前行中的 ...
- vim中 set 用法设置
vi set用法from google search一.常用收集如下:(vi set)set autoindent 在插入模式下,对每行按与上行同样的标准进行缩进,与shiftwidth选项结 ...
- vim中输入tab符
今天在写Makefile时各种出错.后来发现是all:的下一行,make前面必须是tab符,不能是空格. 但是vim中只要按tab就会自动转换成4个空格.平时编程需要,也不便把这个设置取消. 查了下, ...
- vim 中 也可以 直接安装 emmet 直接使用zen coding 生成 l指定个数的 lorem ipsum文字.
超链接的写法: 当作为链接的文字, 比较长时, 整个作为链接 就显得不是 很适合. 可以取其中的某一个单词 作为 超链接的 关键字:如: click here to continue emmet中如何 ...
- vim中添加molokai.vim 配色安装
无意中发现知乎中讨论的话题: 你认为最好看的 Vim 配色方案(color scheme)是哪款? 网友回答 排在第一位的是:molokai 啊,最经典的配色 既然molokai这么经典,当然要用了. ...
- 解决vi/vim中粘贴会在行首多很多缩进和空格的问题
解决vi/vim中粘贴会在行首多很多缩进和空格的问题 secureCRT会将你原来的文本原封不动的按照字符串的样式发送给服务器.所以当你的服务器上的vim设置为autoindent的话,在i模式下,那 ...
随机推荐
- 微信开放平台--》网站应用开发 微信登录网站接口(https://open.weixin.qq.com/)
地址:https://open.weixin.qq.com/ 手册:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&am ...
- C#图片增加水印
给图片增加水印 1.引用 using System.Drawing; 2.代码实现 string ImagePath = @"C:\Users\RAPOO\Pictures\Camera R ...
- Spring提前加载与懒加载
首先,Spring默认是提前加载,这意味着当项目启动,spring初始化,spring会把所有的扫描包下的 ,所有带spring 注解(@Component.@Repository.@Service. ...
- mysql备份脚本-mysqldump
背景:全库备份 备份流程: 1.生成DB列表,将DB名字写入文件 2.定义备份函数,结果写入SQL文件 3.压缩文件,减少磁盘占用量 4.设置保留天数,定期删除n天之前的 5.通过for循环读取DB列 ...
- Objective-C 集成农行支付接口
部分参考代码: [NANetworkHandler POSTWithURL:APP_ABCPay par:dict isStored:NO success:^(id responseObject, B ...
- 解题报告:poj2689 Prime Distance
2017-10-03 11:29:20 writer:pprp 来源:kuangbin模板 从已经筛选好的素数中筛选出规定区间的素数 /* *prime DIstance *给出一个区间[L,U],找 ...
- 算法学习 - ST表 - 稀疏表 - 解决RMQ问题
2017-08-26 21:44:45 writer:pprp RMQ问题就是区间最大最小值查询问题: 这个SparseTable算法构造一个表,F[i][j] 表示 区间[i, i + 2 ^ j ...
- 24,25-request对象
var http = require('http'); var server = http.createServer(); server.listen() console.log(server.add ...
- JavaScript权威指南--表达式与运算符
本章要点 表达式是javascript中的一个短语,javascript解释器会将其计算出一个结果. 程序中的常量.变量名就是一种简单的表达式.复杂的表达式是由简单的表达式组成的,比如数组访问表达式. ...
- springmvc+rest整合redis
最近在做一个项目需要用到关系数据库mysql和缓存redis,以及非关系型数据库mongoDB.昨天下午到今天上午一直在搞springmvc整合redis,期间出现的错误一直让人抓狂,在网上搜索的结果 ...