[emacs] 使用ggtags瀏覽代碼

 

[emacs] 使用ggtags瀏覽代碼html

 

[emacs] 使用ggtags瀏覽代碼


 

1 相關的鏈接

2 global簡介

ggtags在實現過程當中主要運到了global程序, 所以在這裏首先介紹一下global的使用.github

2.2 使用

那麼如何使用呢, 首先應該考慮到的是, 察看軟件自身攜帶的幫助信息,測試

global --help

那麼就將出現一系列的使用規則. 剩下的就是對這些規則一點點的嘗試了, 因爲在http://www.gnu.org/software/global/ 中說明: global支持C, C++, Yacc, Java, PHP4 和彙編的定義以及引用的查找, 對於其餘的41種語言 只支持定義的查找, 所以文中舉例的對象爲jsoup, 下載地址爲: http://jsoup.org/.lua

先在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
相關文章
相關標籤/搜索