使用者介面

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


Nvim UI 協定 ui
UI 可以實作為外部客戶端程序,透過 RPC API 與 Nvim 通訊。預設的 UI 模型是一個類似終端機的網格,使用單一等寬字型。UI 可以選擇讓視窗繪製在不同的網格上,並讓某些元素(「小工具」)由 UI 本身呈現,而不是由 Nvim 呈現(「外部化」)。
ui-option
呼叫 nvim_ui_attach() 來告知 Nvim 您的程式想要繪製寬 × 高 單元的 Nvim 螢幕網格。這通常由嵌入器在啟動時完成(請參閱 ui-startup),但 UI 也可以連接到正在執行的 Nvim 實例並調用 nvim_ui_attach()。options 參數是一個包含以下(可選)鍵值的映射:
ui-rgb
rgb 決定顏色格式。
true:(預設)24 位元 RGB 顏色
false:終端機顏色(8 位元,最多 256 色)
ui-override
override 決定 UI 功能如何解析。
true:啟用請求的 UI 功能,即使並非所有連接的 UI(包括 TUI)都支援。
false:(預設)停用所有連接的 UI(包括 TUI)不支援的 UI 功能。
ui-ext-options
ext_cmdline 外部化命令列。 ui-cmdline
ext_hlstate 詳細的 highlight 狀態。 ui-hlstate 會隱含設定 ext_linegrid
ext_linegrid 基於行的網格事件。 ui-linegrid 會隱含停用 ui-grid-old
ext_messages 外部化訊息。 ui-messages 會隱含設定 ext_linegridext_cmdline
ext_multigrid 每個視窗的網格事件。 ui-multigrid 會隱含設定 ext_linegrid
ext_popupmenu 外部化 popupmenu-completion'wildmenu'ui-popupmenu
ext_tabline 外部化標籤列。 ui-tabline
ext_termcolors 使用外部預設顏色。
term_name 設定終端機的名稱 'term'
term_colors 設定支援的顏色數量 't_Co'。
stdin_fd 從這個 fd 讀取緩衝區 1,如同它是 stdin 一樣 --。僅限於啟動時的 --embed UI。 ui-startup-stdin
stdin_tty 告知 stdin 是否為 tty
stdout_tty 告知 stdout 是否為 tty
指定未知的選項會導致錯誤;UI 可以檢查 api-metadata 中的 ui_options 鍵,以取得支援的選項。
預設情況下,Nvim 要求所有連接的 UI 都支援相同的功能,因此啟用的功能是所請求功能的交集。UI 可以指定 ui-override 來反轉此行為(對於除錯很有用)。「option_set」事件會宣告哪些功能處於啟用狀態。
Nvim 會將 RPC 通知傳送給所有附加的 UI,方法名稱為「redraw」,並帶有一個參數:螢幕「更新事件」的陣列(批次)。每個更新事件本身都是一個陣列,其第一個元素是事件名稱,其餘元素是事件參數元組。因此,可以連續傳送多個相同種類的事件,而無需重複事件名稱。
單一 RPC 通知中典型的「redraw」批次範例
['notification', 'redraw',
  [
    ['grid_resize', [2, 77, 36]],
    ['grid_line',
      [2, 0, 0, [[' ' , 0, 77]], false],
      [2, 1, 0, [['~', 7], [' ', 7, 76]], false],
      [2, 9, 0, [['~', 7], [' ', 7, 76]], false],
      ...
      [2, 35, 0, [['~', 7], [' ', 7, 76]], false],
      [1, 36, 0, [['[', 9], ['N'], ['o'], [' '], ['N'], ['a'], ['m'], ['e'], [']']], false],
      [1, 36, 9, [[' ', 9, 50]], false],
      [1, 36, 59, [['0', 9], [','], ['0'], ['-' ], ['1'], [' ', 9, 10], ['A'], ['l', 9, 2]], false]
    ],
    ['msg_showmode', [[]]],
    ['win_pos', [2, 1000, 0, 0, 77, 36]],
    ['grid_cursor_goto', [2, 0, 0]],
    ['flush', []]
  ]
]
事件必須按順序處理。Nvim 在完成整個螢幕的重繪時,會傳送「flush」事件(因此所有視窗都具有一致的緩衝區狀態、選項等等的視圖)。在整個螢幕重繪完成之前,可能會傳送多個「redraw」批次,而「flush」僅在最後一個批次之後傳送。使用者應該只看到最終狀態(當傳送「flush」時),而不是在處理批次陣列的一部分時,或在不是以「flush」結尾的批次之後的任何中間狀態。
預設情況下,Nvim 會傳送 ui-globalui-grid-old 事件(用於向後相容性);這些足以實作類似終端機的介面。然而,新的 ui-linegrid 更有效率地表示文字(特別是 highlight 的文字),並允許需要多個網格的 UI 功能。新的 UI 應實作 ui-linegrid 而不是 ui-grid-old
Nvim 可選擇性地將各種螢幕元素「語義化」地作為結構化事件傳送,而不是原始的網格線,如 ui-ext-options 所指定。UI 必須自行呈現這些元素,Nvim 不會將它們繪製在網格上。
Nvim 的未來版本可能會新增新的更新種類,並且可能會將新的參數附加到現有的更新種類。客戶端必須準備好忽略這些擴充,以實現向前相容性。 api-contract

UI 啟動 ui-startup

UI 嵌入器(使用 --embed 啟動 Nvim 並稍後呼叫 nvim_ui_attach() 的客戶端)必須啟動 Nvim 時不帶 --headless
nvim --embed
Nvim 會在載入啟動檔案和讀取緩衝區之前暫停,以便 UI 有機會調用請求並進行早期初始化。只要 UI 調用 nvim_ui_attach(),啟動就會繼續。
一個簡單的 UI 只需要執行一個 nvim_ui_attach() 請求,然後準備好處理任何 UI 事件。一個功能更豐富的 UI,可能需要額外配置 Nvim 程序,應使用以下啟動程序
1. 如果需要設定客戶端程式庫和/或取得支援的 UI 擴充列表,請調用 nvim_get_api_info()
2. 執行任何應在載入使用者配置之前發生的配置。此時緩衝區和視窗不可用,但可用於設定對 init.vim 可見的 g: 變數
3. 如果 UI 希望在載入使用者配置後執行額外的設定,請註冊 VimEnter 自動指令
nvim_command("autocmd VimEnter * call rpcrequest(1, 'vimenter')")
4. 現在調用 nvim_ui_attach()。UI 現在必須處理使用者輸入:載入 init.vim 和緩衝區可能會導致阻塞提示。
5. 如果使用了步驟 3,Nvim 會將一個阻塞的「vimenter」請求傳送到 UI。在這個請求處理程序內,UI 可以安全地在進入正常模式之前執行任何初始化,例如讀取由 init.vim 設定的變數。
ui-startup-stdin
UI 可以支援內建 TUI 透過 command | nvim - 調用的原生從 stdin 讀取功能。 -- 嵌入程序可以偵測到它的 stdin 是否開啟到一個不是終端機的檔案,就像 Nvim 所做的那樣。然後它需要將這個 fd 轉發到 Nvim。由於 fd=0 已經用於從嵌入器向 Nvim 傳送 rpc 資料,因此它需要使用其他檔案描述符,例如 fd=3 或更高。
然後,應該將 stdin_fd 選項傳遞給 nvim_ui_attach,並且 Nvim 將隱含地將其讀取為緩衝區。此選項只能在 Nvim 使用 --embed 選項啟動時使用,如上所述。

全域事件 ui-global

以下 UI 事件始終會發出,並描述編輯器的全域狀態。
["set_title", title]
["set_icon", icon]
分別設定視窗標題和圖示(最小化)視窗標題。在不區分兩者的視窗系統中,可以忽略「set_icon」。
["mode_info_set", cursor_style_enabled, mode_info]
cursor_style_enabled 是一個布林值,表示 UI 是否應設定游標樣式。 mode_info 是模式屬性映射的列表。目前的模式由 mode_change 事件的 mode_idx 欄位給定。
每個模式屬性映射可能包含以下鍵:
鍵 描述
cursor_shape:「block」、「horizontal」、「vertical」 cell_percentage:游標佔據的單元格百分比。 blinkwaitblinkonblinkoff:請參閱 cursor-blinkingattr_id:游標屬性 ID(由 hl_attr_define 定義)。當 attr_id 為 0 時,應交換背景和前景顏色。 attr_id_lm:當 :lmap 開啟時的游標屬性 ID。 short_name:模式代碼名稱,請參閱 'guicursor'name:模式描述性名稱。 mouse_shape:(待實作。)
某些模式中會缺少某些鍵。
以下鍵已過時:
hl_id:請改用 attr_idid_lm:請改用 attr_id_lm
["option_set", name, value]
UI 相關選項已變更,其中 name 是以下之一:
在 UI 首次連接到 Nvim 時,以及每當使用者或外掛程式變更選項時觸發。
如果選項的效果在其他 UI 事件中傳達,則不會在此處表示。例如,不是轉發 'mouse' 選項的值,而是「mouse_on」和「mouse_off」UI 事件直接指示滑鼠支援是否處於啟用狀態。某些選項(例如 'ambiwidth')已在網格上生效,其中會加入適當的空白單元格,但是 UI 在呈現從 Nvim 傳送的原始文字時,仍然可以使用這些選項,例如 ui-cmdline
["chdir", path]
嵌入式 Nvim 程序的目前目錄已變更為 path
["mode_change", mode, mode_idx]
編輯器模式已變更。mode 參數是一個字串,表示目前的模式。mode_idxmode_info_set 事件中發出的陣列的索引。UI 應根據相應項目中指定的屬性變更游標樣式。所報告的模式集將在 Nvim 的新版本中變更,例如,更多子模式和臨時狀態可能會表示為單獨的模式。
["mouse_on"]
["mouse_off"]
在目前的編輯器模式中啟用/停用了'mouse'。對於終端機 UI,或嵌入到滑鼠可能會與滑鼠的其他用法衝突的應用程式中很有用。其他 UI 可以忽略此事件。
["busy_start"]
["busy_stop"]
指示 UI 必須停止呈現游標。此事件命名錯誤,實際上與忙碌狀態無關。
["suspend"]
使用了:suspend 命令或 CTRL-Z 對應。終端機客戶端(或其他有意義的客戶端)可以自行暫停。其他客戶端可以安全地忽略它。
["update_menu"]
選單對應已變更。
["bell"]
["visual_bell"]
分別使用聲音或視覺提示通知使用者。
["flush"]
Nvim 已完成螢幕重繪。對於呈現到內部緩衝區的實作,這是將重繪部分顯示給使用者的時間。

網格事件(基於行) ui-linegrid

ext_linegrid ui-option 啟用。建議所有新的 UI 都使用此選項。會隱式停用 ui-grid-old
ui-grid-old 相比,最大的改變是使用單一的 grid_line 事件來更新螢幕行的內容(而舊的協定則使用游標、高亮和文字事件的組合)。
這些事件大多以 grid 索引作為第一個參數。Grid 1 是預設用於整個編輯器螢幕狀態的全局網格。ext_linegrid 功能本身永遠不會導致建立額外的網格;若要啟用每個視窗的網格,請啟用 ui-multigrid
高亮屬性群組是預先定義的。UI 應該維護一個表格,將數值高亮 ID 對應到實際的屬性。
["grid_resize", grid, width, height]
調整 grid 的大小。如果客戶端之前沒有見過 grid,則會以這個大小建立一個新的網格。
["default_colors_set", rgb_fg, rgb_bg, rgb_sp, cterm_fg, cterm_bg]
前三個參數分別設定預設的前景、背景和特殊顏色。cterm_fgcterm_bg 指定在 256 色終端機中使用的預設顏色代碼。
預設情況下,RGB 值將永遠是有效的顏色。如果沒有設定任何顏色,它們將根據 'background' 選項預設為黑色和白色。如果設定 ext_termcolors 選項,則會改為使用 -1 作為未設定的顏色。這對於 TUI 實現非常有用,在這種情況下,預期會使用終端機內建的("ANSI")預設值。
注意:與對應的 ui-grid-old 事件不同,螢幕並非總是在傳送此事件後清除。UI 必須自行使用變更的背景顏色重新繪製螢幕。
ui-event-hl_attr_define
["hl_attr_define", id, rgb_attr, cterm_attr, info]
id 的高亮新增到高亮表格中,其屬性由 rgb_attrcterm_attr 字典指定,包含以下(所有可選)的鍵。
foreground:前景顏色。background:背景顏色。special:用於各種底線的顏色(如果存在)。reverse:反向顯示。前景和背景顏色會互換。italic:斜體文字。bold:粗體文字。strikethrough:刪除線文字。underline:底線文字。該行具有 special 顏色。undercurl:波浪底線文字。波浪線具有 special 顏色。underdouble:雙底線文字。這些線具有 special 顏色。underdotted:點狀底線文字。這些點具有 special 顏色。underdashed:虛線底線文字。這些虛線具有 special 顏色。altfont:替代字型。blend:混合層級 (0-100)。UI 可以使用它來支援將浮動視窗混合到背景或表示透明的游標。url:與此高亮相關聯的 URL。UI 應將該區域呈現為可點擊的超連結。
對於缺少的顏色鍵,應使用預設顏色。請勿將預設值儲存在表格中,而是儲存一個哨兵值,以便變更的預設顏色會生效。所有布林鍵預設為 false,且僅在它們為 true 時傳送。
高亮總是同時以 RGB 格式和終端機 256 色代碼傳輸,分別作為 rgb_attrcterm_attr 參數。 ui-rgb 選項不再有效。大多數外部 UI 只需要儲存和使用 rgb_attr 屬性。
id 0 將始終用於預設高亮,其顏色由 default_colors_set 定義,且沒有套用任何樣式。
注意:如果 Nvim 的內部高亮表格已滿,Nvim 可能會重複使用 id 值。在這種情況下,Nvim 始終會重新繪製受重新定義的 ID 影響的螢幕單元格,因此 UI 無需自行追蹤此情況。
info 預設為空陣列,將由以下說明的 ui-hlstate 擴充功能使用。
["hl_group_set", name, hl_id]
內建高亮群組 name 設定為使用先前 hl_attr_define 呼叫所定義的屬性 hl_id。 此事件不是直接呈現使用屬性 ID 的網格所必需的,但對於想要使用一致的高亮呈現自己的元素的 UI 很有用。 例如,使用 ui-popupmenu 事件的 UI 可以使用 hl-Pmenu 系列的內建高亮。
ui-event-grid_line
["grid_line", grid, row, col_start, cells, wrap]
grid 上重新繪製 row 的連續部分,從欄 col_start 開始。 cells 是一個陣列的陣列,每個陣列包含 1 到 3 個項目:[text(, hl_id, repeat)]text 是應放置在單元格中的 UTF-8 文字,其高亮 hl_id 由先前的 hl_attr_define 呼叫定義。 如果 hl_id 不存在,則應使用在同一次呼叫中最近看到的 hl_id (它總是為事件中的第一個單元格傳送)。 如果存在 repeat,則應將單元格重複 repeat 次 (包括第一次),否則僅一次。
雙寬字元的右側單元格將表示為空字串。 雙寬字元永遠不會使用 repeat
如果單元格變更的陣列未到達該行的末尾,則其餘部分應保持不變。 當應清除行的其餘部分時,將傳送足夠重複以覆蓋剩餘行的空格字元。
wrap 是一個布林值,指示此行是否換行到下一行。 當重新繪製換行到下一行的行時,Nvim 將發出一個 grid_line 事件,該事件涵蓋該行的最後一欄,且 wrap 設定為 true,然後立即發出一個從下一行的第一欄開始的 grid_line 事件。
["grid_clear", grid]
清除 grid
["grid_destroy", grid]
不再使用 grid,並且 UI 可以釋放與其關聯的任何數據。
["grid_cursor_goto", grid, row, col]
grid 設定為當前網格,並將 row, col 設定為此網格上的游標位置。 此事件在 redraw 批次中最多發送一次,並指示可見的游標位置。
["grid_scroll", grid, top, bot, left, right, rows, cols]
捲動 grid 的區域。 這在語義上與編輯器 捲動 無關,而是說「複製這些螢幕單元格」的優化方式。
以下圖表顯示每個捲動方向會發生什麼。"===" 表示 SR (捲動區域) 邊界。 "---" 表示移動的矩形。 請注意,dst 和 src 共用一個共同的區域。
如果 rows 大於 0,則向上移動 SR 中的矩形,這可能在向下捲動時發生。
+-------------------------+
| (clipped above SR)      |            ^
|=========================| dst_top    |
| dst (still in SR)       |            |
+-------------------------+ src_top    |
| src (moved up) and dst  |            |
|-------------------------| dst_bot    |
| src (invalid)           |            |
+=========================+ src_bot
如果 rows 小於零,則向下移動 SR 中的矩形,這可能在向上捲動時發生。
+=========================+ src_top
| src (invalid)           |            |
|------------------------ | dst_top    |
| src (moved down) and dst|            |
+-------------------------+ src_bot    |
| dst (still in SR)       |            |
|=========================| dst_bot    |
| (clipped below SR)      |            v
+-------------------------+
cols 在此版本的 Nvim 中始終為零,並保留供將來使用。
ui-grid-old 事件更新程式碼時請注意:範圍是末尾不包含,這與 API 慣例一致,但與末尾包含的 set_scroll_region 不同。
捲入的區域將在捲動事件後立即使用 ui-event-grid_line 填滿。 因此,UI 無需在處理捲動事件時清除此區域。

網格事件(基於單元格) ui-grid-old

這是螢幕網格的傳統表示法,如果 ui-linegrid 未啟用,則會發出此表示法。 新的 UI 應改為實作 ui-linegrid
["resize", width, height]
網格大小調整為 widthheight 單元格。
["clear"]
清除網格。
["eol_clear"]
從游標位置清除到目前行的末尾。
["cursor_goto", row, col]
將游標移動到位置 (row, col)。 目前,使用相同的游標來定義文字插入和可見游標的位置。 但是,在處理「redraw」事件中的整個陣列之後,只有最後一個游標位置才應為可見的游標位置。
["update_fg", color]
["update_bg", color]
["update_sp", color]
分別設定預設的前景、背景和特殊顏色。
ui-event-highlight_set
["highlight_set", attrs]
設定下一個放置在網格上的文字將具有的屬性。 attrs 是一個包含以下鍵的字典。 任何缺少的鍵都會重設為其預設值。 顏色預設值由 update_fg 等更新設定。 所有布林鍵預設為 false。
foreground:前景顏色。background:背景顏色。special:用於各種底線的顏色(如果存在)。reverse:反向顯示。前景和背景顏色會互換。italic:斜體文字。bold:粗體文字。strikethrough:刪除線文字。underline:底線文字。該行具有 special 顏色。undercurl:波浪底線文字。波浪線具有 special 顏色。underdouble:雙底線文字。這些線具有 special 顏色。underdotted:點狀底線文字。這些點具有 special 顏色。underdashed:虛線底線文字。這些虛線具有 special 顏色。
["put", text]
將 (utf-8 編碼的) 字串 text 放置在游標位置 (且游標會前進),並具有上次 highlight_set 更新所設定的高亮。
["set_scroll_region", top, bot, left, right]
定義以下 scroll 使用的捲動區域。
注意:範圍是末尾包含,這與 API 慣例不一致。
["scroll", count]
捲動捲動區域中的文字。 以下圖表說明將會發生的情況,具體取決於捲動方向。 "=" 用於表示 SR (捲動區域) 邊界,而 "-" 用於表示移動的矩形。 請注意,dst 和 src 共用一個共同的區域。
如果 count 大於 0,則向上移動 SR 中的矩形,這可能在向下捲動時發生。
+-------------------------+
| (clipped above SR)      |            ^
|=========================| dst_top    |
| dst (still in SR)       |            |
+-------------------------+ src_top    |
| src (moved up) and dst  |            |
|-------------------------| dst_bot    |
| src (cleared)           |            |
+=========================+ src_bot
如果 count 小於零,則向下移動 SR 中的矩形,這可能在向上捲動時發生。
+=========================+ src_top
| src (cleared)           |            |
|------------------------ | dst_top    |
| src (moved down) and dst|            |
+-------------------------+ src_bot    |
| dst (still in SR)       |            |
|=========================| dst_bot    |
| (clipped below SR)      |            v
+-------------------------+

詳細高亮狀態擴充功能 ui-hlstate

ext_hlstate ui-option 啟用。 隱式啟用 ui-linegrid
預設情況下,Nvim 只會使用最終計算的高亮屬性(如 ui-event-highlight_set 中的字典鍵所描述)來描述網格單元格。 ext_hlstate 擴充功能允許 UI 也接收單元格中活動高亮的語義描述。 在此模式下,高亮將在表格中預先定義,請參閱 ui-event-hl_attr_defineui-event-grid_linehl_attr_define 中的 info 參數將包含高亮的語義描述。 由於可以組合高亮群組,因此它將是項目陣列,最後一個項目具有最高優先級。 每個項目都是一個字典,包含以下可能的鍵
kind:永遠存在。以下其中一個值:"ui":內建 UI 高亮。高亮群組。"syntax":由語法宣告或其他執行階段/外掛程式功能(例如 nvim_buf_add_highlight())套用至緩衝區的高亮。"terminal":來自於 終端機模擬器 中執行的程序的高亮。不包含其他語義資訊。ui_name:來自 高亮群組 的高亮名稱。僅限 "ui" 種類。hi_name:最終 :highlight 群組的名稱,其中定義了所使用的屬性。id:代表此項目的唯一數值 ID。
注意: "ui" 項目會同時存在 ui_namehi_name。這些可能不同,因為內建群組已連結到另一個群組 :hi-link,或者因為使用了 'winhighlight'。即使高亮群組被清除,UI 項目仍會被傳輸,因此即使沒有套用任何屬性,ui_name 仍可始終用於可靠地識別螢幕元素。

多重網格事件 ui-multigrid

ext_multigrid ui-option 啟用。隱含啟用 ui-linegrid
有關網格事件,請參閱 ui-linegrid。請參閱 nvim_ui_try_resize_grid() 以請求更改網格大小。請參閱 nvim_input_mouse() 以將滑鼠事件傳送至 Nvim。
多重網格擴展使 UI 更能控制視窗的顯示方式
UI 會在每個視窗的獨立網格上接收更新。
UI 可以獨立於視窗在全球佈局上佔用的空間來設定網格大小。因此,UI 可以為每個視窗使用不同的字體大小。或者在視窗邊框周圍保留空間給自己的元素,例如 UI 工具組的滾動條。
專用網格用於顯示訊息,該訊息可能會在視窗區域上滾動。(或者可以使用 ui-messages)。
預設情況下,網格大小由 Nvim 處理,並在建立分割時設定為外部網格大小(即 Nvim 中視窗框架的大小)。一旦 UI 設定了網格大小,Nvim 將不再處理該網格的大小,並且 UI 必須在外部大小更改時更改網格大小。若要將網格大小處理委託回 Nvim,請請求大小 (0, 0)。
視窗可以隱藏和重新顯示,而其網格不會被取消分配。對於同一個視窗,可能會發生多次這種情況,例如在切換標籤時。
["win_pos", grid, win, start_row, start_col, width, height]
設定 Nvim 中網格的位置和大小(即外部網格大小)。如果視窗先前已隱藏,則現在應再次顯示。
["win_float_pos", grid, win, anchor, anchor_grid, anchor_row, anchor_col, mouse_enabled, zindex]
顯示或重新設定浮動視窗 win。該視窗應顯示在另一個網格 anchor_grid 之上,位於指定的位置 anchor_rowanchor_col。有關 anchor 的含義和更多定位細節,請參閱 nvim_open_win()。如果視窗可以接收滑鼠事件,則 mouse_enabled 為 true。
["win_external_pos", grid, win]
顯示或重新設定外部視窗 win。該視窗應顯示為桌面環境中的單獨頂層視窗,或類似的內容。
["win_hide", grid]
停止顯示視窗。視窗可以稍後再次顯示。
["win_close", grid]
關閉視窗。
["msg_set_pos", grid, row, scrolled, sep_char]
grid 上顯示訊息。網格將顯示在預設網格(grid=1)上的 row 處,覆蓋整個欄寬。scrolled 指示訊息區域是否已滾動以覆蓋其他網格。繪製分隔符號然後使用 msgsep 可能很有用。內建 TUI 繪製一條填滿 sep_char 的完整線條('fillchars' msgsep 欄位)和 hl-MsgSeparator 高亮。
ui-messages 處於活動狀態時,不使用訊息網格,並且不會傳送此事件。
["win_viewport", grid, win, topline, botline, curline, curcol, line_count, scroll_delta]
指示視窗中顯示的緩衝區文字範圍,以及緩衝區中的游標位置。所有位置均以零為基礎。如果結尾處存在填充線,則 botline 設定為大於緩衝區行數的值。scroll_delta 包含自上次發出 win_viewport 以來,視窗頂線移動的距離。它旨在用於實現平滑滾動。為此,它僅計算「虛擬」或「顯示」線,因此折疊僅算作一行。當滾動超過整個螢幕時,它是一個近似值。
批次中的所有更新(例如 grid_line)都會影響新的可視區域,儘管 win_viewport 是在更新之後接收的。實作(例如)平滑滾動的應用程式應考慮到這一點,並使網格與螢幕上顯示的內容分開,並在接收到 win_viewport 後將其複製到可視區域目的地。
["win_viewport_margins", grid, win, top, bottom, left, right]
指示視窗網格的邊距,這些邊距 _不是_ 由 win_viewport 事件指示的可視區域的一部分。例如,當存在 'winbar' 和浮動視窗邊框時,會發生這種情況。
["win_extmark", grid, win, ns_id, mark_id, row, col]
更新目前在視窗中可見的 extmark 的位置。僅當標記具有 ui_watched 屬性時才會發出。

彈出式選單事件 ui-popupmenu

ext_popupmenu ui-option 啟用。
此 UI 擴充功能委派 彈出式選單完成 和命令列 'wildmenu' 的呈現。
["popupmenu_show", items, selected, row, col, grid]
顯示 彈出式選單完成items 是要顯示的完成項目陣列;每個項目都是表單 [word, kind, menu, info] 的陣列,如 complete-items 中所定義,不同之處在於,如果存在 abbr,則 word 會被取代。selected 是最初選取的項目,即項目陣列中從零開始的索引(如果未選取任何項目,則為 -1)。rowcol 給出錨點位置,其中將是已完成單字的第一個字元。當使用 ui-multigrid 時,grid 是錨點位置的網格。當 ext_cmdline 處於活動狀態時,grid 設定為 -1,以指示彈出式選單應錨定到外部命令列。然後,col 將是命令列文字中的位元組位置。
["popupmenu_select", selected]
在目前彈出式選單中選取一個項目。selected 是上次 popupmenu_show 事件中項目陣列中從零開始的索引,如果未選取任何項目,則為 -1。
["popupmenu_hide"]
隱藏彈出式選單。

標籤列事件 ui-tabline

ext_tabline ui-option 啟用。
["tabline_update", curtab, tabs, curbuf, buffers]
標籤列已更新。UI 應在自訂標籤列小工具中呈現此資料。注意:選項 curbuf + buffers 已在 API7 中新增。curtab:目前標籤頁。tabs:字典列表 [{ "tab": Tabpage, "name": String }, ...] curbuf:目前緩衝區控制碼。buffers:字典列表 [{ "buffer": 緩衝區控制碼, "name": String}, ...]

命令列事件 ui-cmdline

ext_cmdline ui-option 啟用。
此 UI 擴充功能委派 命令列 的呈現('wildmenu' 除外)。對於命令列 'wildmenu' UI 事件,請啟用 ui-popupmenu
["cmdline_show", content, pos, firstc, prompt, indent, level]
content:[attrs, string] 的列表 [[{}, "t"], [attrs, "est"], ...]
當顯示或更改命令列時觸發。content 是應在命令列中顯示的完整內容,而 pos 是命令列中游標的位置。內容分為具有不同高亮屬性的區塊,這些屬性表示為字典(請參閱 ui-event-highlight_set)。
firstcprompt 是文字,如果非空,則應顯示在命令列的前面。firstc 始終指示內建命令列,例如 :(ex 命令)和 / ?(搜尋),而 promptinput() 提示。indent 告訴內容應縮排多少個空格。
可以遞迴方式調用 Nvim 命令列,例如,在命令列提示符號處鍵入 <c-r>=level 欄位用於區分同時處於活動狀態的不同命令列。第一個調用的命令列的層級為 1,下一個遞迴調用的提示的層級為 2。從 命令列視窗 調用的命令列的層級高於已編輯的命令列。
["cmdline_pos", pos, level]
變更命令列中的游標位置。
["cmdline_special_char", c, shift, level]
在命令列中的游標位置顯示特殊字元。這通常用於指示暫止狀態,例如在 c_CTRL-V 之後。如果 shift 為 true,則應移動游標後的文字,否則應覆寫游標處的字元。
應在下一個 cmdline_show 時隱藏。
["cmdline_hide"]
隱藏命令列。
["cmdline_block_show", lines]
顯示目前命令列的上下文區塊。例如,如果使用者以互動方式定義 :function
:function Foo()
:  echo "foo"
:
lines 是一個高亮區塊行列表,其格式與 "cmdline_show" contents 參數相同。
["cmdline_block_append", line]
在目前顯示區塊的結尾處附加一行。
["cmdline_block_hide"]
隱藏區塊。

訊息/對話方塊事件 ui-messages

ext_messages ui-option 啟用。隱含啟用 ui-linegridui-cmdline
此 UI 擴充功能委派訊息和對話方塊的呈現。本應在訊息/命令列螢幕空間中呈現的訊息,將以 UI 事件的形式發出。
Nvim 不會為命令列或訊息配置螢幕空間。'cmdheight' 會被設定為零,但可以更改並用於取代命令列或訊息視窗。命令列狀態會以 ui-cmdline 事件發出,UI 必須處理這些事件。
["msg_show", kind, content, replace_last]
向使用者顯示訊息。
kind 名稱指示訊息的種類:"" (空) 未知 (考慮提出功能請求:bugs) "confirm" confirm():confirm 對話框 "confirm_sub" :substitute 確認對話框 :s_c "emsg" 錯誤 (errors、內部錯誤、:throw、…) "echo" :echo 訊息 "echomsg" :echomsg 訊息 "echoerr" :echoerr 訊息 "lua_error" :lua 程式碼中的錯誤 "rpc_error" 來自 rpcrequest() 的錯誤回應 "return_prompt" 多個訊息後的 按下 Enter 提示 "quickfix" 快速修復導航訊息 "search_count" 搜尋計數訊息('shortmess' 的 "S" 標誌)"wmsg" 警告("search hit BOTTOM"、W10、…)未來可能會新增種類;用戶端應將未知的種類視為空種類。
content [attr_id, text_chunk] 元組的陣列,建立不同高亮度的訊息文字塊。區塊之間不應新增額外間距,text_chunk 本身包含任何必要的空白。訊息可以包含換行符 "\n"。
replace_last 決定應如何顯示多個訊息:false:將訊息與所有仍然可見的先前訊息一起顯示。true:取代最近一次 msg_show 呼叫中的訊息,但任何其他可見訊息都應保持不變。
["msg_clear"]
清除目前由 "msg_show" 顯示的所有訊息。(以下其他 "msg_" 事件傳送的訊息將不受影響)。
["msg_showmode", content]
顯示 'showmode'錄製 訊息。content 的格式與 "msg_show" 中的相同。此事件會傳送空的 content 以隱藏最後一則訊息。
["msg_showcmd", content]
顯示 'showcmd' 訊息。content 的格式與 "msg_show" 中的相同。此事件會傳送空的 content 以隱藏最後一則訊息。
["msg_ruler", content]
用於在狀態列中沒有空間顯示標尺時顯示 'ruler'content 的格式與 "msg_show" 中的相同。此事件會傳送空的 content 以隱藏最後一則訊息。
["msg_history_show", entries]
當調用 :messages 命令時傳送。歷史記錄會以條目列表的形式傳送,其中每個條目都是 [kind, content] 元組。
["msg_history_clear"]
清除 :messages 歷史記錄。
主頁
命令索引
快速參考