標記

Nvim 的 :help 頁面,由 產生,來源於 原始碼,使用 tree-sitter-vimdoc 解析器。


以及 Bram Moolenaar
標記支援功能

1. 簡介 sign-intro signs

當除錯器或其他 IDE 工具驅動編輯器時,它需要能夠提供特定的高亮顯示,快速告知使用者有關檔案的有用資訊。其中一個例子是除錯器在左側欄中顯示一個圖示,表示中斷點。另一個例子可能是代表程式計數器(PC)的箭頭。標記功能允許在視窗的左側放置標記或圖示,並定義將套用到該行的突出顯示。將標記顯示為圖像很可能僅在 gvim 中可行(儘管 Sun Microsystem 的 dtterm 支援此功能,但它是我知道唯一這樣做的終端模擬器)。文字標記和突出顯示應在任何彩色終端模擬器中都可行。
標記和突出顯示不僅對除錯器有用。還有一些外掛程式使用標記來標記建置錯誤或顯示版本控制狀態。
使用標記有兩個步驟
1. 定義標記。這指定了圖像、文字和突出顯示。例如,您可以定義一個「break」標記,其中包含停止路標的圖像和文字「!!」。
2. 放置標記。這指定了顯示標記的檔案和行號。定義的標記可以在不同的行和檔案中放置多次。
sign-column
當為檔案定義標記時,Vim 會自動新增一個兩字元的欄位來顯示它們。當最後一個標記被移除時,該欄位會再次消失。可以使用 'signcolumn' 選項來變更此行為。
該欄位的顏色由 SignColumn 突出顯示群組 hl-SignColumn 設定。設定顏色的範例
:highlight SignColumn guibg=darkgrey
如果啟用了 'cursorline',則會使用 CursorLineSign 突出顯示群組 hl-CursorLineSignsign-identifier
每個已放置的標記都由一個稱為標記識別碼的數字識別。此識別碼用於跳轉到標記或移除標記。識別碼是在使用 :sign-place 命令或 sign_place() 函式放置標記時指派的。每個標記識別碼都應是唯一的數字(每個緩衝區)。放置相同的識別碼兩次將移動先前放置的標記。sign_place() 函式可以使用零標記識別碼來呼叫以配置下一個可用的識別碼。
sign-group
每個已放置的標記都可以指派給全域群組或具名群組。放置標記時,如果未提供群組名稱,或使用了空字串,則該標記將放置在全域群組中。否則,該標記將放置在具名群組中。標記識別碼在群組內是唯一的。標記群組允許 Vim 外掛程式使用唯一的標記,而不會干擾使用標記的其他外掛程式。
sign-priority
每個已放置的標記都會被指派一個優先順序值,該值與標記群組無關。標記的預設優先順序為 10,此值可以在定義時指定不同的值來為不同的標記變更。當多個各自具有圖示或文字的標記放置在同一行上時,標記會從左到右按優先順序遞減排序,直到達到 'signcolumn' 中設定的最大寬度。不符合的低優先順序標記會被隱藏。具有突出顯示屬性的最高優先順序標記始終顯示。
當刪除放置標記的行時,標記會隨之移除。
這是一個將標記「piet」放置在目前檔案的第 23 行,並使用文字「>>」顯示的範例
:sign define piet text=>> texthl=Search
:exe ":sign place 2 line=23 name=piet file=" .. expand("%:p")
這是再次刪除它的命令
:sign unplace 2
請注意,「:sign」命令後面不能跟隨其他命令或註解。如果需要這樣做,請使用 :execute 命令。
定義標記。:sign-define E255 E160 E612
有關等效的 Vim script 函式,請參閱 sign_define()
:sign define {name} {argument}... 定義新的標記或設定現有標記的屬性。{name} 可以是數字(全部是數字)或以非數字開頭的名稱。前導零會被忽略,因此「0012」、「012」和「12」被視為相同的名稱。可以定義大約 120 種不同的標記。
接受的引數
icon={bitmap} 定義可以找到點陣圖的檔案名稱。應該是完整的路徑。點陣圖應適合兩個字元的位置。這不會檢查。如果點陣圖太大,會導致重繪問題。
工具組支援
Win32 .bmp、.ico、.cur
priority={prio} 標記的預設優先順序,請參閱 sign-priority
linehl={group} 用於放置標記的整行的突出顯示群組。最有用的是定義背景顏色。
numhl={group} 用於放置標記的行號的突出顯示群組。覆寫 hl-LineNrhl-LineNrAbovehl-LineNrBelowhl-CursorLineNr
text={text} E239
定義沒有圖示或未使用 GUI 時顯示的文字。只允許使用可列印字元,且它們必須佔用一個或兩個顯示單元。
texthl={group} 用於文字項目的突出顯示群組。
culhl={group} 當游標與標記在同一行上,並且啟用 'cursorline' 時,用於文字項目的突出顯示群組。
範例
:sign define MySign text=>> texthl=Search linehl=DiffText
刪除標記:sign-undefine E155
有關等效的 Vim script 函式,請參閱 sign_undefine()
:sign undefine {name} 刪除先前定義的標記。如果仍然放置了具有此 {name} 的標記,這將導致問題。
範例
:sign undefine MySign

列出標記 :sign-list E156

有關等效的 Vim script 函式,請參閱 sign_getdefined()
:sign list 列出所有已定義的標記及其屬性。
:sign list {name} 列出一個已定義的標記及其屬性。

放置標記 :sign-place E158

有關等效的 Vim script 函式,請參閱 sign_place()
:sign place {id} line={lnum} name={name} file={fname} 將定義為 {name} 的標記放置在檔案 {fname} 的第 {lnum} 行。:sign-fname
檔案 {fname} 必須已載入到緩衝區中。必須使用確切的檔案名稱,不展開萬用字元、$ENV 和 ~,並且不能逸出空白字元。忽略尾隨空白字元。
該標記會在 {id} 下記住,這可用於進一步操作。{id} 必須是數字。多次放置相同的 {id} 會移動標記。
可以在 "file=" 之前指定以下可選標記屬性:group={group} 將標記放置在標記群組 {group} 中 priority={prio} 將優先順序 {prio} 指派給標記
預設情況下,該標記放置在全域標記群組中。
預設情況下,標記會被指派預設優先順序 10,除非在標記定義中另有指定。若要指派不同的優先順序值,請使用 "priority={prio}" 來指定值。當多個標記放置在同一行上時,優先順序會用於判斷顯示的標記。
範例
:sign place 5 line=3 name=sign1 file=a.py
:sign place 6 group=g2 line=2 name=sign2 file=x.py
:sign place 9 group=g2 priority=50 line=5
                                \ name=sign1 file=a.py
:sign place {id} line={lnum} name={name} [buffer={nr}] 相同,但使用緩衝區 {nr}。如果未提供緩衝區引數,則將標記放置在目前的緩衝區中。
範例
:sign place 10 line=99 name=sign3
:sign place 10 line=99 name=sign3 buffer=3
E885
:sign place {id} name={name} file={fname} 將檔案 {fname} 中已放置的標記 {id} 變更為使用已定義的標記 {name}。請參閱上述有關 {fname} :sign-fname 的註解。這可以用於變更顯示的標記而無需移動它(例如,當除錯器已停止在中斷點時)。
可選的 "group={group}" 屬性可以在 "file=" 之前使用,以選取特定群組中的標記。可選的 "priority={prio}" 屬性可以用於變更現有標記的優先順序。
範例
:sign place 23 name=sign1 file=/path/to/edit.py
:sign place {id} name={name} [buffer={nr}] 相同,但使用緩衝區 {nr}。如果未提供緩衝區引數,則使用目前的緩衝區。
範例
:sign place 23 name=sign1
:sign place 23 name=sign1 buffer=7

移除標記 :sign-unplace E159

有關等效的 Vim script 函式,請參閱 sign_unplace()
:sign unplace {id} file={fname} 從檔案 {fname} 中移除先前放置的標記 {id}。請參閱上述有關 {fname} :sign-fname 的註解。
:sign unplace {id} group={group} file={fname} 相同,但移除標記群組 {group} 中的標記 {id}
:sign unplace {id} group=* file={fname} 相同,但從所有標記群組中移除標記 {id}
:sign unplace * file={fname} 移除檔案 {fname} 中的所有已放置標記。
:sign unplace * group={group} file={fname} 移除檔案 {fname} 中群組 {group} 的所有已放置標記。
:sign unplace * group=* file={fname} 移除檔案 {fname} 中所有群組的所有已放置標記。
:sign unplace {id} buffer={nr} 從緩衝區 {nr} 中移除先前放置的標記 {id}
:sign unplace {id} group={group} buffer={nr} 從緩衝區 {nr} 中移除群組 {group} 中先前放置的符號 {id}
:sign unplace {id} group=* buffer={nr} 從緩衝區 {nr} 中移除所有群組中先前放置的符號 {id}
:sign unplace * buffer={nr} 從緩衝區 {nr} 中移除所有已放置的符號。
:sign unplace * group={group} buffer={nr} 從緩衝區 {nr} 中移除群組 {group} 中所有已放置的符號。
:sign unplace * group=* buffer={nr} 從緩衝區 {nr} 中移除所有群組中所有已放置的符號。
:sign unplace {id} 從所有出現此符號的檔案中移除先前放置的符號 {id}
:sign unplace {id} group={group} 從所有出現此符號的檔案中移除群組 {group} 中先前放置的符號 {id}
:sign unplace {id} group=* 從所有出現此符號的檔案中移除所有群組中先前放置的符號 {id}
:sign unplace * 從所有檔案的全域群組中移除所有已放置的符號。
:sign unplace * group={group} 從所有檔案中移除群組 {group} 中所有已放置的符號。
:sign unplace * group=* 從所有檔案中移除所有群組中所有已放置的符號。
:sign unplace 移除游標位置的已放置符號。如果該行放置了多個符號,則只會移除一個。
:sign unplace group={group} 移除游標位置群組 {group} 中的已放置符號。
:sign unplace group=* 移除游標位置任何群組中的已放置符號。

列出已放置的符號 :sign-place-list

請參閱 sign_getplaced() 取得等效的 Vim script 函式。
:sign place file={fname} 列出檔案 {fname} 中放置的符號。請參閱上方關於 {fname} 的說明 :sign-fname
:sign place group={group} file={fname} 列出檔案 {fname} 中群組 {group} 的符號。
:sign place group=* file={fname} 列出檔案 {fname} 中所有群組的符號。
:sign place buffer={nr} 列出緩衝區 {nr} 中放置的符號。
:sign place group={group} buffer={nr} 列出緩衝區 {nr} 中群組 {group} 的符號。
:sign place group=* buffer={nr} 列出緩衝區 {nr} 中所有群組的符號。
:sign place 列出所有檔案全域群組中已放置的符號。
:sign place group={group} 列出所有檔案中符號群組 {group} 中已放置的符號。
:sign place group=* 列出所有檔案中所有符號群組中已放置的符號。
跳轉至符號 :sign-jump E157
請參閱 sign_jump() 取得等效的 Vim script 函式。
:sign jump {id} file={fname} 開啟檔案 {fname} 或跳至包含 {fname} 的視窗,並將游標定位在符號 {id} 的位置。請參閱上方關於 {fname} 的說明 :sign-fname。如果檔案沒有顯示在視窗中,且目前的檔案無法被 放棄,則此操作會失敗。
:sign jump {id} group={group} file={fname} 相同,但跳至群組 {group} 中的符號。
:sign jump {id} [buffer={nr}] E934
相同,但使用緩衝區 {nr}。如果緩衝區 {nr} 沒有名稱,則此操作會失敗。如果沒有提供緩衝區參數,則使用目前的緩衝區。
:sign jump {id} group={group} [buffer={nr}] 相同,但跳至群組 {group} 中的符號。
主頁
命令索引
快速參考