zoukankan      html  css  js  c++  java
  • [emacs] 使用ggtags浏览代码

    [emacs] 使用ggtags浏览代码

     

    [emacs] 使用ggtags浏览代码

    2 global简介

    ggtags在实现过程中主要运到了global程序, 因此在这里首先介绍一下global的使用.

    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 : 用于存储定义相关信息
    

    主要选项介绍:

    1. -c, –completion [prefix]
      # 输出prefix开头的所有符号
      $ global -c | more
      # 所有的类名变量名都会被列举出来, 并按照字符顺序给出
      Accumulator
      ...
      xmlParser
      
    2. -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
      
    3. -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);
      ...
      
    4. -p, –print-dbpath 输出GTAGS的位置
    5. -P, –path [pattern] 输出匹配的路径名称
    6. -u, –update 更新tag文件
    7. -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
      
    8. –color 对匹配部份进行高亮显示
    9. -d, –definition 输出定义的位置
      $ global -d Elements
      main/java/org/jsoup/select/Elements.java
      
    10. -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 {
      ...
      
    11. -i, –ignore-case 忽略匹配模式中的大小写
    12. -l, –local 只输出当前目录下的tags
    13. -r, –reference, –rootdir 输出引用tags

    3 ggtags使用介绍

    主要的使用方法参见:

    https://github.com/leoliu/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

    Validate XHTML 1.0
  • 相关阅读:
    想想学习C已经有9年了, 应该可以写一些东西了.——转
    python gmail 多个收件人
    翻译_工具建议
    C语言的可变参数——转
    XP专业版中安装了IIS,配置好之后只能访问静态htm网页,图片之类的,但是ASP 文件确不能读取,提示无法显示网页提示
    ubuntu 修改IP,网关等
    java发送邮件
    在MyEclipse中配置Tomcat服务器
    国外程序员推荐:每个程序员都应读的书(转载)
    100个有关管理的网站
  • 原文地址:https://www.cnblogs.com/grass-and-moon/p/3746689.html
Copyright © 2011-2022 走看看