做者: Jolly Wing(jiqingwu@gmail.com) 日期: 2014-05-13 聲明:轉載請保留做者信息
GNU global
是一款優秀的代碼閱讀工具。
能對符號的定義和引用創建索引,方便代碼閱讀。html
GNU global支持的語言不少,
它自身支持 C, C++, Yacc, Java, PHP4 和彙編語言中符號的定義和引用,
還經過 Exuberant Ctags 支持40餘種語言的符號定義的索引。
能經過命令行使用,也能和Vim以及Emacs很好地集成。shell
對於Unix/Linux用戶來講,能夠直接從倉庫進行安裝。安裝完不須要進行其它設置,很省事。windows
Windows用戶要本身去下載。
到Gnu Global的 下載頁面,
能夠下載代碼,本身用mingw編譯,也能夠下載預編譯的二進制文件。app
由於本身編譯麻煩,我直接下載了二進制包。
下載zip壓縮包後,解壓,將其bin目錄加入Emacs路徑。
具體能夠這樣作:函數
(setenv "PATH" (concat "/path/to/global/bin;" (getenv "PATH")))
而後在Emacs的shell中試一下 gtags --help
,看gtags可否正常運行。工具
安裝 gtags.el
。
gtags安裝時自帶了gtags.el,找到它,把它複製到emacs的 load-path
中。
也能夠用 elpa 安裝 gtags.el.
準備好 gtags.el
以後,在 .emacs 或是 .emacs.d/init.el 中加入(setq gtags-suggested-key-mapping t)
以使用建議的鍵綁定。spa
生成代碼索引文件。
打開在代碼目錄下執行 gtags
,將生成索引,生成GPATH, GTAGS, GRTAGS。
若是想看詳細輸出,用 gtags -v
,能看到哪些文件被索引了。命令行
在Emacs中打開一個源文件, M-x gtags-mode
,若是 gtags.el
正確安裝了,就會啓動 gtags minor-mode。
而後就可使用gtags的按鍵綁定了。我經常使用的按鍵以下:code
C-c v
,告訴Emacs項目的根目錄,即到哪裏去找GTAGS等文件。這一步不要跳過,不然你查找符號時Emacs會問你去哪裏查找tags。M-.
,跳轉到符號定義。C-t
,返回。C-c g
,在代碼中用grep查找符號。C-c s
, 搜索某個符號。C-c r
, 看一個函數在哪些地方被引用。在Linux/Unix上使用Emacs + global時,通常不會有什麼問題。
但在Windows上會遇到些問題。htm
第一個問題,我按 C-c v
告訴 global 去哪查找TAGS時。Emacs報錯。
gtags-get-rootpath: Searching for program: permission denied, global
這說明在執行gtags.el中的 gtags-get-rootpath
時,找不到 global
程序。
若是Emacs報錯: Searching for program: permission denied, xxx
說明 xxx 不在 exec-path
中。
這裏要說一下 emacs 中 "PATH" 和 exec-path 的區別。
若是你想在emacs的SHELL中調用某個程序,要把它的路徑加入 "PATH" 中。
若是你想在 elisp 中調用某個程序,要把它的路徑加入 exec-path
.
Emacs啓動時,會根據系統環境變量PATH的值初始化exec-path
。
若是你後面經過 setenv
向 PATH 中加入了某個路徑,exec-path
並不會自動包含這個路徑。
好比,剛纔咱們經過
(setenv "PATH" (concat "/path/to/global/bin;" (getenv "PATH")))
向PATH中加入了global的執行路徑,exec-path
中並不包含該路徑,因此會報錯。
咱們要向 exec-path
中加入該路徑。
(setq exec-path (append exec-path '("/path/to/global/bin")))
把global的執行路徑加入 exec-path
以後,再按 C-c v
就能正常運行了。
按 M-.
尋找一個 TAG 試試。又出錯了。
global: directory 'e:/jollywing/job/Casparcg/Server/' not found.
其中e:/jollywing/job/Casparcg/Server/
是剛纔經過 C-c v
設置的項目根目錄,怎麼會找不到呢?
偶然發現,去掉路徑最後的 /
,即根目錄設爲 e:/jollywing/job/Casparcg/Server
就能夠了。
最後說明一下,在操蛋的windows下,纔會遇到這些問題。