Vim 標籤篇


建立時間: 2024年3月6日 08:51
更新時間: 2024年10月29日 08:31

說明

標籤是出現在 “tags” 檔案的一個識別碼。它是一種能夠跳轉的標記。例如,在 C 程式裡,每個函數名稱都可以是一個標籤。在使用標籤檔案之前,”tags” 檔案會由 ctags 這樣的程式產生。

tag-priority

如果有標籤的多個匹配,請使用以下的優先權:

註: - 是空格。

  1. FSC 目前檔案的完全匹配靜態標籤。
  2. F-C 目前檔案的完全匹配全域標籤。
  3. F-- 其他檔案的完全匹配全域標籤。
  4. FS- 其他檔案的完全匹配靜態標籤。
  5. -SC 目前檔案的忽略大小寫匹配靜態標籤。
  6. --C 目前檔案的忽略大小寫匹配全域標籤。
  7. --- 其他檔案的忽略大小寫匹配全域標籤。
  8. -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):


觀看次數: 508
tagvim標籤
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!