標記
Nvim 的 :help
頁面,由 產生,來源於 原始碼,使用 tree-sitter-vimdoc 解析器。
以及 Bram Moolenaar
標記支援功能
當除錯器或其他 IDE 工具驅動編輯器時,它需要能夠提供特定的高亮顯示,快速告知使用者有關檔案的有用資訊。其中一個例子是除錯器在左側欄中顯示一個圖示,表示中斷點。另一個例子可能是代表程式計數器(PC)的箭頭。標記功能允許在視窗的左側放置標記或圖示,並定義將套用到該行的突出顯示。將標記顯示為圖像很可能僅在 gvim 中可行(儘管 Sun Microsystem 的 dtterm 支援此功能,但它是我知道唯一這樣做的終端模擬器)。文字標記和突出顯示應在任何彩色終端模擬器中都可行。
標記和突出顯示不僅對除錯器有用。還有一些外掛程式使用標記來標記建置錯誤或顯示版本控制狀態。
使用標記有兩個步驟
1. 定義標記。這指定了圖像、文字和突出顯示。例如,您可以定義一個「break」標記,其中包含停止路標的圖像和文字「!!」。
2. 放置標記。這指定了顯示標記的檔案和行號。定義的標記可以在不同的行和檔案中放置多次。
該欄位的顏色由 SignColumn 突出顯示群組
hl-SignColumn 設定。設定顏色的範例
:highlight SignColumn guibg=darkgrey
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 {name}
{argument}
... 定義新的標記或設定現有標記的屬性。{name}
可以是數字(全部是數字)或以非數字開頭的名稱。前導零會被忽略,因此「0012」、「012」和「12」被視為相同的名稱。可以定義大約 120 種不同的標記。
接受的引數
icon={bitmap} 定義可以找到點陣圖的檔案名稱。應該是完整的路徑。點陣圖應適合兩個字元的位置。這不會檢查。如果點陣圖太大,會導致重繪問題。
工具組支援
Win32 .bmp、.ico、.cur
linehl={group} 用於放置標記的整行的突出顯示群組。最有用的是定義背景顏色。
text={text}
E239定義沒有圖示或未使用 GUI 時顯示的文字。只允許使用可列印字元,且它們必須佔用一個或兩個顯示單元。
texthl={group} 用於文字項目的突出顯示群組。
culhl={group} 當游標與標記在同一行上,並且啟用
'cursorline' 時,用於文字項目的突出顯示群組。
範例
:sign define MySign text=>> texthl=Search linehl=DiffText
:sign undefine {name}
刪除先前定義的標記。如果仍然放置了具有此 {name}
的標記,這將導致問題。
:sign list 列出所有已定義的標記及其屬性。
:sign list {name}
列出一個已定義的標記及其屬性。
: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
{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 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
{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}
中的符號。