[emacs] 使用ggtags浏览代码
[emacs] 使用ggtags浏览代码
[emacs] 使用ggtags浏览代码
Table of Contents
2 global简介
ggtags在实现过程中主要运到了global程序, 因此在这里首先介绍一下global的使用.
2.1 安装
2.2 使用
那么如何使用呢, 首先应该考虑到的是, 察看软件自身携带的帮助信息,
global --help
那么就将出现一系列的使用规则. 剩下的就是对这些规则一点点的尝试了, 由于在http://www.gnu.org/software/global/ 中说明: global支持C, C++, Yacc, Java, PHP4 和汇编的定义以及引用的查找, 对于其他的41种语言 只支持定义的查找, 因此文中举例的对象为jsoup, 下载地址为: http://jsoup.org/.
先在jsoup源代码目录中的src目录下使用以下命令建立tags文件:
gtags
此时新增的文件有:
GPATH : 用于存储目录相关信息
GRTAGS : 用于存储引用相关信息
GTAGS : 用于存储定义相关信息
主要选项介绍:
- -c, –completion [prefix]
# 输出prefix开头的所有符号
$ global -c | more
# 所有的类名变量名都会被列举出来, 并按照字符顺序给出
Accumulator
...
xmlParser - -f, –file files
# 输出文件中所有的tags
$ global -f test/java/org/jsoup/TextUtil.java # 输出的结果
# 从左往右依次是tags名称, 出现的行数, 文件, 那一行的内容
TextUtil 7 test/java/org/jsoup/TextUtil.java public class TextUtil {
stripNewlines 8 test/java/org/jsoup/TextUtil.java public static String stripNewlines(String text) { # 接着来察看一下TextUtil.java中到底含有什么内容
$ cat test/java/org/jsoup/TextUtil.java
package org.jsoup; /**
Text utils to ease testing @author Jonathan Hedley, jonathan@hedley.net */
public class TextUtil {
public static String stripNewlines(String text) {
text = text.replaceAll("\\n\\s*", "");
return text;
}
} # 从下面一个示例中, 我们可以发现-c对于java而言选项得到的是类, 接口, 以及方法.
# 测试代码如下:
class PackageClass {
class Inner {
}
private int value;
public int method() {
return value;
}
} interface Inter {
public void method();
public void methodInter();
} public class Test {
public static void main(String[] args) {
}
} $ gloabl -c
Inner
Inter
PackageClass
Test
main
method
methodInter - -g, –grep pattern [files]
# 输出所有内容中匹配pattern的行, 当提供目标文件时, 输出目标文件中匹配的所有行
$ gloabl -g Elements # 结果为
main/java/org/jsoup/examples/ListLinks.java
main/java/org/jsoup/helper/Validate.java
main/java/org/jsoup/nodes/Document.java
main/java/org/jsoup/nodes/Element.java
... $ global -g Elements test/java/org/jsoup/parser/HtmlParserTest.java
test/java/org/jsoup/parser/HtmlParserTest.java # 我们发现并不是像帮助文档中所说, 那么怎样才能输出对应的行信息呢?
# 就从帮助信息中寻找相应的解决办法
# 发现有两个option和输出结果的格式相关:
# --result format; -x; -t
# 如:
$ global -xg Elements test/java/org/jsoup/parser/HtmlParserTest.java
Elements 7 test/java/org/jsoup/parser/HtmlParserTest.java import org.jsoup.select.Elements;
Elements 69 test/java/org/jsoup/parser/HtmlParserTest.java Element p = doc.getElementsByTag("p").get(0);
... - -p, –print-dbpath 输出GTAGS的位置
- -P, –path [pattern] 输出匹配的路径名称
- -u, –update 更新tag文件
- -a, –absolute 输出绝对路径名, 默认的输出的路径名为相对路径
$ global -P Elements
main/java/org/jsoup/select/Elements.java
test/java/org/jsoup/select/ElementsTest.java $ global -aP Elements
/home/zz/src/jsoup/src/main/java/org/jsoup/select/Elements.java
/home/zz/src/jsoup/src/test/java/org/jsoup/select/ElementsTest.java - –color 对匹配部份进行高亮显示
- -d, –definition 输出定义的位置
$ global -d Elements
main/java/org/jsoup/select/Elements.java - -e, –regex pattern 用正则表达式进行匹配
$ global --result grep -e .*Elements
main/java/org/jsoup/select/Evaluator.java:288: public static final class AllElements extends Evaluator {
main/java/org/jsoup/select/Elements.java:16:public class Elements implements List<Element>, Cloneable {
test/java/org/jsoup/select/ElementsTest.java:18:public class ElementsTest {
... - -i, –ignore-case 忽略匹配模式中的大小写
- -l, –local 只输出当前目录下的tags
- -r, –reference, –rootdir 输出引用tags
3 ggtags使用介绍
3.1 补充
3.1.1 gtags-find-tag-dwim
M-x ggtags-find-tag-dwim
查找输入点所在位置的tag的所有引用以及定义的位置. 当使用下面的命令的时候:
C-u M-x ggtags-find-tag-dwim
只查找定义的位置, 并且允许交互性的输入查找的对象. 这正类似于 global -d Elemetns
要进一步的知道该命令的默认快捷键, 可以通过下面的方式进行查找: 直接从ggtags.el源代码中察看
C-x C-f ggtags.el
C-s ggtags-find-tag-dwim
# 可以找到相应的快捷键为
M-.
因此上面的两条命令可以用下面的方式搞定:
M-.
C-u M-.
3.1.2 ggtags-find-definition
这个函数并没有在相应的源文件中找到, 可能是已经被上面一条前面加C-u的方式替代了
3.1.3 ggtags-find-reference
该命令类似于 global -r Elements
Date: 2014-05-20 Tue
Author: Zhong Xiewei
Org version 7.8.11 with Emacs version 24
[emacs] 使用ggtags浏览代码的更多相关文章
- 用emacs 阅读 c/c++ 代码
在emacs编程中有以下需求 从调用一个函数的地方跳转到函数的定义的地方 或是反过来从函数定义的地方列出所有调用这个函数的地方 实现办法 需要安装以下软件 gnu global(阅读源代码的工具)官网 ...
- IE全屏浏览代码
以前做过一个网络版的商场导购触摸屏系统,用ASP写的,就是要在运行的时候全屏浏览而不能出现标题栏.工具栏.状态栏等.解决方法是用JS弹出全屏窗口,建立html文件,代码如下: <script l ...
- 【实习记】2014-09-04浏览代码查middle资料+总结我折腾过的源码浏览器
浏览着代码,看源码可以先看make文件,make文件有制造的流程信息. 一般可以从运行的程序对应的cpp看起.然而如果有框架,那就不容易了,会关系错纵复杂. 总结一下我折腾过的源码阅读器. s ...
- 改变Emacs下的注释代码方式以支持当前行(未选中情况下)的注释/反注释
Emacs下支持多行代码的注释/反注释,命令是comment-or-uncomment-region. 我喜欢把它绑定在快捷键C-c C-/上,如下: (global-set-key [?\C-c ? ...
- linux 和 android 源码的 cross reference (即网页浏览代码的引用)
linux: http://lxr.free-electrons.com/ 相当好 android: http://androidxref.com
- [chrome插件分享] gitlab-tree 更方便的浏览Gitlab上的代码
说明 经常玩Github的人肯定都知道大名鼎鼎的octotree吧,这款chrome插件可以说是浏览代码的神器,利用左侧的树形菜单可以很方便的打开目录.浏览文件等,加上Github全站本身使用了pja ...
- Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=273479 Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖) ...
- 可能是迄今为止最好的GitHub代码浏览插件--赞
https://chrome.google.com/webstore/category/extensions?hl=zh-CN 搜索"insight.io" chrome://ex ...
- 搭建emacs的go编程语言环境
关于emacs就不说明了,直接切入主题.关于我的emacs配置,可以直接参考GitHub上的lienhua34/myemacs-conf. go-mode 安装 关于go-mode的安装,可以直接参考 ...
随机推荐
- JavaScript资源大全中文版(Awesome最新版--转载自张果老师博客)
JavaScript资源大全中文版(Awesome最新版) 目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框 ...
- jqueryui 进度条使用
<title></title> <script src="../Js/NewJs_CFJ/jquery.js" type="text/jav ...
- 纯jQuery-添加/修改/删除 标签,属性
<h1>通过学习<精彩绝伦的jQuery>与W3C,大致了解JQuery的一些方法.</h1> PS:需要有一些前置条件,比如JQuery源代码,比如html就要有 ...
- numpy数组的操作
numpy - 介绍.基本数据类型.多维数组ndarray及其内建函数 http://blog.csdn.net/pipisorry/article/details/22107553 http://w ...
- .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)
说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...
- Python黑帽编程2.5 函数
Python黑帽编程2.5 函数 写了几节的基础知识,真心感觉有点力不从心.这块的内容说实话,看文档是最好的方式,本人的写作水平,真的是找不出更好的写法,头疼.简单带过和没写一样,写详细了和本系列教程 ...
- [ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action
概括的讲,View中的内容可以分为静态和动态两部分.静态内容一般是html元素,而动态内容指的是在应用程序运行的时候动态创建的内容.给View添加动态内容的方式可归纳为下面几种: Inline cod ...
- Fiddler调式使用知多少(一)深入研究
Fiddler调式使用(一)深入研究 阅读目录 Fiddler的基本概念 如何安装Fiddler 了解下Fiddler用户界面 理解不同图标和颜色的含义 web session的常用的快捷键 了解we ...
- Eclipse 常用快捷键 (动画讲解)
Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率. 编辑相关快捷键 注释 Ctrl + / 快速修复 Ctrl + ...
- Android-webview和js互相调用
Android-webview和js互相调用 Android 和 H5 都是移动开发应用的非常广泛.市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的 ...