tag 指的是文件中的一種特殊的標誌,在使用 Vim 時,可以由很簡單的按鍵就馬上跳到那個文章及那個 tag 的位置,也可以跳回原處。這個功能就好像目前的網頁上的 hyperlink 一樣。但不一樣的是,這個 tag 並不是寫在文件裡頭的,而是由 ctags 這支程式(或其他類此的工具程式)來產生相關檔的 tags,然後存檔於一個外部檔案裡頭,要用到時再由 Vim 叫出來。
| ctags | 這是最常用到的,可能會有兩種版本,舊的 ctags 只能用於 C 程式碼。exuberant ctags 則可用於 C/C++、Java、Fortran……等等。可由 ctags -version 得知版本。 |
| etags | 這是 emacs/xemacs 所附的,功能也是非常強大。 |
| JTags | 這只能處理 Java 程式碼。 |
| ptags.py | 處理 Python 程式碼。 |
| ptags | 處理 Perl 程式碼。 |
這裡主要講述 exuberant ctags。可 man ctags 或 ctags -help 得知所支援的程式語言。在 $VIMRUNTIME/tools 目錄下會有一些工具可以使用,例如專用在 sh script,Tcl/Tk script 的 tag 工具。其他的 tags 工具,系統上不一會安裝,有需要的話得自行安裝,一般使用,應該 ctags 就夠用了,ctags 也可以模擬 etags。
以往,Vim 會附上 exuberant ctags,但新近的版本已沒有附上,得由使用者自行安裝,或使用系統上就有的 ctags。如果系統上的並不是 exuberant ctags,可自行由 http://ctags.sourceforge.net 下載、安裝。
以下是一般 tag 檔的結構(以一行為例):
tagname TAB tagfile TAB tagaddress term field
| tagname | 這是識別字的名稱,通常就是一些函數名,或其他任何識別字。 |
| TAB | 這是老老實實的一個 Tab 鍵。 |
| tagfile | 這是 tag 檔的檔名。 |
| tagaddress | 這是 Ex 指令,通常就是搜尋指令,但行數也是可以。 |
| term | ;" 這個記號(兩個字元)以後的內容視為註解。 |
| field | 待瞭解。 |
不講究的話,可以在所解開的 source code 目錄下,下以下指令:
ctags -R *
這樣會有 source code 目錄下產生一個 tags 這個檔(可以使用 -f 選項來指定檔案名),裡頭就包含了整個 source code 的所有檔案的 tags 資訊,包括其下所有的子目錄下的檔案。ctags 已盡可能的做到聰明掃描檔案的能力,會忽略和程式碼無關的檔案。當然 ctags 還有許多精細的參數可以使用,請 man ctags。
請注意,ctags 預設會將輸出檔排序,因此不必自行另外去排序。有排序有一個好處,那就是 Vim 會去使用 binary search 的方式去搜尋,這樣會比較快。
如果就照上一節的方式產生 tag files,那麼只要在 source code 目錄下由 vim 去開啟檔案的話,會自動載入 tags 這個檔案,無需另行載入,否則要由 :set tags=your.tags 來指定 tags 檔。然後就是照一般使用 Vim 線上說明一樣,游標移到識別字或函數名上,按 Ctrl+],要回到原處就按 Ctrl+T。
請注意,Vim 啟動時,工作目錄(vim 啟動時的所在目錄)名為 tags 的檔案會自動載入,$VIMRUNTIME/doc 及 $HOME/.vim/doc 目錄下的 tags 檔也會自動載入。而且,凡是載入的 tags 檔裡頭所有標誌文字都可以使用補全鍵來補全,別忘了這個好用的功能。
Vim 的線上說明文件就是使用 tags 的方式來管理的,因此使用方法也是和一般 tags 檔一樣,由 Ctrl+] 及 Ctrl+T 來控制。
這個工具一般不會在系統的 $PATH 裡頭,而是在 Vim 原始碼的 runtime/doc 目錄下。由於一般 tags 程式只對程式碼作用,因此對一般的文字檔沒有作用。而這個 doctags 則會依文字檔中有 *這是標題* 標誌的內容做出 tag 檔出來。
在 source code,進入 runtime/doc 目錄後:
make doctags => 編譯出 doctags 這個可執行檔 make tags => 製作此目錄下所有 *.txt 的 tags 檔
這個 doctags 也可以保留下來,把自己新製作的 *.txt 置於 $VIMRUNTIME/doc 目錄下,執行:
doctags *.txt | sort > tags
這樣就行了,重新進入 vim 後就可以使用了。
當然,這個工具需自行編譯,因此對一般使用者而言,使用上並不方便。其實 Vim 已有內建這個工具了。
進入 vim 後,:helpt[ags] 目錄名 這樣就會把所指定目錄下的所有 *.txt 產生 tags 檔案。這個動作也可以由命令列來執行:
vim -c "helptags ." -c quit 這和 doctags *.txt | sort > tags 是一樣的。
由於 Vim 自動會搜尋的文件目錄是,目前工作目錄、$VIMRUNTIME/doc 及 $HOME/.vim/doc 因此建議把自己的新文件置於 $HOME/.vim/doc 較好。以下為一個簡單的例子:
This is a test. *test1* This is another test. *test2*
存檔成 test.txt 置於 $HOME/.vim/doc 目錄下:
cd .vim/doc vim -c "helptags ." -c quit
重新開啟 vim,然後 :h test1 試看看就知道怎麼一回事了。而按 F1 求助鍵的話,會發現在後面的砲份多了一個章節,那就是 LOCAL ADDITIONS:,家目錄下的文件目錄就是置放於此。
Compiled by Edward G.J. Lee (2003-03-03)