Vim 標籤篇
分類
說明
標籤是出現在 “tags” 檔案的一個識別碼。它是一種能夠跳轉的標記。例如,在 C 程式裡,每個函數名稱都可以是一個標籤。在使用標籤檔案之前,”tags” 檔案會由 ctags 這樣的程式產生。
tag-priority
如果有標籤的多個匹配,請使用以下的優先權:
註: - 是空格。
- FSC目前檔案的完全匹配靜態標籤。
- F-C目前檔案的完全匹配全域標籤。
- F--其他檔案的完全匹配全域標籤。
- FS-其他檔案的完全匹配靜態標籤。
- -SC目前檔案的忽略大小寫匹配靜態標籤。
- --C目前檔案的忽略大小寫匹配全域標籤。
- ---其他檔案的忽略大小寫匹配全域標籤。
- -S-其他檔案的忽略大小寫匹配靜態標籤。
tag-regexp
:tag 和 :tselect 命令接受正規表達式引數。pattern 可以看到如何使用特殊字元。如果引數以 / 開始,它被認為是一個模式(pattern)。如果不是,它被認為是按字面意思出現的完整的標籤名。
範例:
:tag main
跳到具有最高優先權的 “main” 標籤。
:tag /^get
跳到以 “get” 開頭且優先權最高的標籤。
:tag /norm
列出所有包含 “norm” 的標籤,例如 “id_norm”。
如果參數既能按字面意思匹配,也能按正規表達式匹配,則字面意思匹配有更高的優先權。例如,:tag /open 在 “open_file” 和 “file_open” 之前匹配 “open”。
如果使用模式,那麼忽略大小寫。 如果你想在模式中匹配大小寫,使用 \C。
tag-!
以下是官方文件的內容,但實際上我還不清楚 ! 有什麼特別之處。
如果標籤在目前檔案裡,沒有問題。不然,採取的行動取決於目前檔案是否有改變,還有命令之後是否加了 !,以及 autowrite 選項:
| 標籤是否在目前檔案裡 | 檔案是否改變 | ! | autowrite 選項 | 行動 | 
|---|---|---|---|---|
| 是 | x | x | x | 轉到標籤 | 
| 否 | 否 | x | x | 讀入其他檔案,轉到標籤 | 
| 否 | 是 | 是 | x | 放棄目前檔案,讀入其他檔案,轉到標籤 | 
| 否 | 是 | 否 | 開 | 寫入目前檔案,讀入其他檔案,轉到標籤 | 
| 否 | 是 | 否 | 關 | 失敗 | 
跳轉到標籤
:[count]ta[g][!] {name}
根據 tags 檔案的訊息,跳到 {name} 的定義上,並且把 {name} 放在標籤堆疊上,如果有 {name} 的多個匹配,則跳到它們中的第 [count] 個,如果 [count] 被省略,則跳到第一個。
[!] 見 tag-!。
{name} 可以是正規表達式。見 tag-regexp。
g<LeftMouse>
<C-LeftMouse>
CTRL-]
跳到遊標所在的關鍵字的定義。和 :tag {name} 相同,只不過 {name} 是遊標之下或之後的關鍵字。
如果有 {name} 的多個匹配,則跳到它們中的第 [count]個。如果沒有 [count],跳到第一個。
標籤堆疊
g<RightMouse>
<C-RightMouse>
CTRL-T
跳到標籤堆疊上第 [count] 個較早的項目 (預設為 1)。
:[count]po[p][!]
跳到標籤堆疊上第 [count] 個較早的項目 (預設為 1)。
[!] 見 tag-!。
:[count]ta[g][!]
跳到標籤堆疊上第 [count] 個較新的項目 (預設為 1)。
[!] 見 tag-!。
:tags
顯示標籤堆疊的內容。
範例輸出:
| # | To | tag | FROM | line | in file/text | |
|---|---|---|---|---|---|---|
| 1 | 1 | main | 1 | harddisk2:text/vim/test | ||
| > | 2 | 2 | FuncA | 58 | i = FuncA(10); | |
| 3 | 1 | FuncC | 357 | harddisk2:text/vim/src/amiga.c | 
啟動的項目以 ‘>’ 標示。
該列表顯示你跳到的標籤和跳轉前遊標的位置。較早的項目在頂部,較新的在底部。
ex 命令
:sts[elect][!] [name]
:tselect[!] [name] 並分割視窗以顯示選擇的標籤。
:tj[ump][!] [name]
類似於 :tselect,但如果只有一個匹配,直接跳轉之。
:tl[ast][!]
跳到最後匹配的標籤。
:[count]tn[ext][!]
跳到向下 [count] 個匹配的標籤 (預設為 1)。
[!] 見 tag-!。
:[count]tN[ext][!]
:[count]tp[revious][!]
跳到向上 [count] 個匹配的標籤 (預設為 1)。
[!] 見 tag-!。
:[count]tf[irst][!]
:[count]tr[ewind][!]
跳到第一個匹配的標籤。如果給予 [count],跳到第 [count] 個匹配的標籤。
[!] 見 tag-!。
:ts[elect][!] [name]
根據 tags 檔案的訊息,列出匹配 [name] 的標籤。如果 [name] 沒有給出,使用標籤堆疊上最後的標籤名稱。
關於 [!] 見 tag-!。
[name] 可以是正規表達式。見 tag-regexp。
範例輸出:
列表使用的優先權順序請見 tag-priority。
| # | priority | kind | tag | file | 
|---|---|---|---|---|
| 1 | F | f | mch_delay | os_amiga.c mch_delay(msec, ignoreinput) | 
| 2 | F | f | mch_delay | os_msdos.c mch_delay(msec, ignoreinput) | 
| 3 | F | f | mch_delay | os_unix.c mch_delay(msec, ignoreinput) | 
Type number and <Enter> (empty cancels):
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!