這也是筆者多年前發表在 NNTP news 上的文章,留存備份。
etags 簡介 -*- Outline -*-
* 前言
有許多的 IDE(Integrated Development Environment) 都提供了函數名稱的
自動完成功能( 亦即,輸入前面幾個字元之後,編輯器可以自動幫你完成後面
的函數名稱)。Vi 裡面有 ctags 可以做到這件事,那麼 Emacs 呢?答案是
etags. 在這篇文章裡,我會簡短的介紹如何使用 etags.
* etags 使用方法
** 建立函數及關鍵字列表
在使用之前,你必須先在你的發展環境目錄底下建立列表; 假設你的發展環
境目錄名稱叫做 /path/to/developer/, 建立列表的方法如下:
% cd /path/to/developer/
% etags *.h *.c
這樣就建立完成了,根據 etags/ctags 的手冊, etags/ctags 可以處理的語
言有 C, Objective C, C++, Java, Fortran, Ada, Cobol, Erlang, LaTeX,
Emacs Lisp/Common Lisp, makefiles, Pascal, Perl, Postscript,
Python, Prolog, Scheme and most assembler-like syntaxes.
預設的列表檔名是 TAGS.
** 把函數及關鍵字列表讀進 Emacs
開始用 Emacs 編輯檔案, 比如說你正在編輯 foo.c, 你先用 C-x C-f 把
foo.c 讀進來之後,你需要使用 etags 的功能,那麼你就執行
M-x visit-tags-table
把 /path/to/developer/TAGS 檔案讀進來。註:
是在鍵盤上通常標示為 Enter.
** 在 Emacs 中搜尋函數內容
有的時候我們會想要直接跳到某個函數裡面去修改他的內容,你可以使用
M-. (沒錯,就是 Meta 跟一個句點) 然後輸入函數名稱就會跳到該函數的
code 那裡去; 如果你按 M-. 的時候游標指著一個函數名稱,你可以在輸入
函數名稱的時候直接按
果你想要回來原來地方,你可以用 M-* 來做到。
如果你想要在另一個視窗內看到該函數源碼,而不是你現在的這個視窗(對照
方便), 那麼你可以用 C-x 4 . TAG
如果你要搜尋某些函數與關鍵字,你可以用 M-x tags-search 的功能,這個
可以用 regular expression 來搜尋。當你用 M-x tags-search
REGEXP
或關鍵字。
** 函數及關鍵字自動完成
etags 並沒有提供函數及關鍵字自動完成(auto-completion)的功能, 但是
Emacs 有提供一個功能可以達成這件事,叫做 dynamic abbreviation
expansion. 這個功能事實上是把去找在開啟的 buffer 裡面有那些字串是你
輸入字串的完整字串,而 TAGS 列表就在一個 buffer 裡面,所以可以達成
函數及關鍵字自動列表。當你輸入一個函數名稱或是一個變數名稱的前面幾
個字母,比如說: foo-, 然後按 M-/, 這時候 Emacs 會把所有可能的字串找
到,並把第一個可能的字串直接完成,所以你按了一次 M-/ 之後可能會變成
foo-bar-function, 你繼續按 M-/ 可以變換成其他可能的字串,直到沒有為
止。或者是你也可以按 C-M-/, 這時候 Emacs 會像其他時候的
auto-completion 的行為一樣,跳出一個視窗把所有的可能列表列出來給你
選擇。
* 結語
當我開始使用 etags 的功能之後,我就沒有辦法不用這個功能了,因為實在
是太方便了。etags 也可以幫你自動完成標準函式庫裡的名稱,只要你在
etags 的時候把 /usr/include 裡的表頭檔案也包含進來就可以了。etags 還
有其他比較進階的功能,我沒有一一列出來,有興趣的人可以去看看 M-x
info 裡的 Emacs 手冊。最後我做一個這次提到的功能列表,供讀者參考用。
* 按鍵列表
M-x visit-tags-table
把 TAGS-file 檔案讀進 Emacs
M-. TAG
C-x 4 . TAG
M-* 回到尋找關鍵字定義之前的地方
M-x tags-search
M-, 找下一個搜尋到的函數或關鍵字
M-/ 自動完成可能的函數或關鍵字
C-M-/ 列出所有函數或關鍵字名稱的自動完成列表
No comments:
Post a Comment