Nvim :help
頁面,由 原始碼 使用 tree-sitter-vimdoc 解析器 產生。
options
參數是一個包含以下(可選)鍵值的映射:override
決定 UI 功能如何解析。ext_cmdline
外部化命令列。 ui-cmdlineext_tabline
外部化標籤列。 ui-tablineext_termcolors
使用外部預設顏色。term_name
設定終端機的名稱 'term'。term_colors
設定支援的顏色數量 't_Co'。stdin_tty
告知 stdin
是否為 tty
。stdout_tty
告知 stdout
是否為 tty
。ui_options
鍵,以取得支援的選項。['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 --embed
Nvim 會在載入啟動檔案和讀取緩衝區之前暫停,以便 UI 有機會調用請求並進行早期初始化。只要 UI 調用 nvim_ui_attach(),啟動就會繼續。nvim_command("autocmd VimEnter * call rpcrequest(1, 'vimenter')")
4. 現在調用 nvim_ui_attach()。UI 現在必須處理使用者輸入:載入 init.vim 和緩衝區可能會導致阻塞提示。command | nvim -
調用的原生從 stdin 讀取功能。 -- 嵌入程序可以偵測到它的 stdin 是否開啟到一個不是終端機的檔案,就像 Nvim 所做的那樣。然後它需要將這個 fd 轉發到 Nvim。由於 fd=0 已經用於從嵌入器向 Nvim 傳送 rpc 資料,因此它需要使用其他檔案描述符,例如 fd=3 或更高。stdin_fd
選項傳遞給 nvim_ui_attach
,並且 Nvim 將隱含地將其讀取為緩衝區。此選項只能在 Nvim 使用 --embed
選項啟動時使用,如上所述。cursor_style_enabled
是一個布林值,表示 UI 是否應設定游標樣式。 mode_info
是模式屬性映射的列表。目前的模式由 mode_change
事件的 mode_idx
欄位給定。cursor_shape
:「block」、「horizontal」、「vertical」 cell_percentage
:游標佔據的單元格百分比。 blinkwait
、blinkon
、blinkoff
:請參閱 cursor-blinking。 attr_id
:游標屬性 ID(由 hl_attr_define
定義)。當 attr_id 為 0 時,應交換背景和前景顏色。 attr_id_lm
:當 :lmap 開啟時的游標屬性 ID。 short_name
:模式代碼名稱,請參閱 'guicursor'。 name
:模式描述性名稱。 mouse_shape
:(待實作。)hl_id
:請改用 attr_id
。 id_lm
:請改用 attr_id_lm
。name
是以下之一:mode
參數是一個字串,表示目前的模式。mode_idx
是 mode_info_set
事件中發出的陣列的索引。UI 應根據相應項目中指定的屬性變更游標樣式。所報告的模式集將在 Nvim 的新版本中變更,例如,更多子模式和臨時狀態可能會表示為單獨的模式。grid_line
事件來更新螢幕行的內容(而舊的協定則使用游標、高亮和文字事件的組合)。grid
索引作為第一個參數。Grid 1 是預設用於整個編輯器螢幕狀態的全局網格。ext_linegrid
功能本身永遠不會導致建立額外的網格;若要啟用每個視窗的網格,請啟用 ui-multigrid。grid
的大小。如果客戶端之前沒有見過 grid
,則會以這個大小建立一個新的網格。cterm_fg
和 cterm_bg
指定在 256 色終端機中使用的預設顏色代碼。ext_termcolors
選項,則會改為使用 -1 作為未設定的顏色。這對於 TUI 實現非常有用,在這種情況下,預期會使用終端機內建的("ANSI")預設值。id
的高亮新增到高亮表格中,其屬性由 rgb_attr
和 cterm_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 應將該區域呈現為可點擊的超連結。rgb_attr
和 cterm_attr
參數。 ui-rgb 選項不再有效。大多數外部 UI 只需要儲存和使用 rgb_attr
屬性。id
0 將始終用於預設高亮,其顏色由 default_colors_set
定義,且沒有套用任何樣式。id
值。在這種情況下,Nvim 始終會重新繪製受重新定義的 ID 影響的螢幕單元格,因此 UI 無需自行追蹤此情況。info
預設為空陣列,將由以下說明的 ui-hlstate 擴充功能使用。name
設定為使用先前 hl_attr_define
呼叫所定義的屬性 hl_id
。 此事件不是直接呈現使用屬性 ID 的網格所必需的,但對於想要使用一致的高亮呈現自己的元素的 UI 很有用。 例如,使用 ui-popupmenu 事件的 UI 可以使用 hl-Pmenu 系列的內建高亮。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
。grid
,並且 UI 可以釋放與其關聯的任何數據。grid
設定為當前網格,並將 row, col
設定為此網格上的游標位置。 此事件在 redraw
批次中最多發送一次,並指示可見的游標位置。grid
的區域。 這在語義上與編輯器 捲動 無關,而是說「複製這些螢幕單元格」的優化方式。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 中始終為零,並保留供將來使用。set_scroll_region
不同。width
和 height
單元格。attrs
是一個包含以下鍵的字典。 任何缺少的鍵都會重設為其預設值。 顏色預設值由 update_fg
等更新設定。 所有布林鍵預設為 false。foreground
:前景顏色。background
:背景顏色。special
:用於各種底線的顏色(如果存在)。reverse
:反向顯示。前景和背景顏色會互換。italic
:斜體文字。bold
:粗體文字。strikethrough
:刪除線文字。underline
:底線文字。該行具有 special
顏色。undercurl
:波浪底線文字。波浪線具有 special
顏色。underdouble
:雙底線文字。這些線具有 special
顏色。underdotted
:點狀底線文字。這些點具有 special
顏色。underdashed
:虛線底線文字。這些虛線具有 special
顏色。text
放置在游標位置 (且游標會前進),並具有上次 highlight_set
更新所設定的高亮。scroll
使用的捲動區域。+-------------------------+ | (clipped above SR) | ^ |=========================| dst_top | | dst (still in SR) | | +-------------------------+ src_top | | src (moved up) and dst | | |-------------------------| dst_bot | | src (cleared) | | +=========================+ src_bot
+=========================+ src_top | src (cleared) | | |------------------------ | dst_top | | src (moved down) and dst| | +-------------------------+ src_bot | | dst (still in SR) | | |=========================| dst_bot | | (clipped below SR) | v +-------------------------+
ext_hlstate
擴充功能允許 UI 也接收單元格中活動高亮的語義描述。 在此模式下,高亮將在表格中預先定義,請參閱 ui-event-hl_attr_define 和 ui-event-grid_line。 hl_attr_define
中的 info
參數將包含高亮的語義描述。 由於可以組合高亮群組,因此它將是項目陣列,最後一個項目具有最高優先級。 每個項目都是一個字典,包含以下可能的鍵kind
:永遠存在。以下其中一個值:"ui":內建 UI 高亮。高亮群組。"syntax":由語法宣告或其他執行階段/外掛程式功能(例如 nvim_buf_add_highlight())套用至緩衝區的高亮。"terminal":來自於 終端機模擬器 中執行的程序的高亮。不包含其他語義資訊。ui_name
:來自 高亮群組 的高亮名稱。僅限 "ui" 種類。hi_name
:最終 :highlight 群組的名稱,其中定義了所使用的屬性。id
:代表此項目的唯一數值 ID。ui_name
和 hi_name
。這些可能不同,因為內建群組已連結到另一個群組 :hi-link,或者因為使用了 'winhighlight'。即使高亮群組被清除,UI 項目仍會被傳輸,因此即使沒有套用任何屬性,ui_name
仍可始終用於可靠地識別螢幕元素。win
。該視窗應顯示在另一個網格 anchor_grid
之上,位於指定的位置 anchor_row
和 anchor_col
。有關 anchor
的含義和更多定位細節,請參閱 nvim_open_win()。如果視窗可以接收滑鼠事件,則 mouse_enabled
為 true。win
。該視窗應顯示為桌面環境中的單獨頂層視窗,或類似的內容。grid
上顯示訊息。網格將顯示在預設網格(grid=1)上的 row
處,覆蓋整個欄寬。scrolled
指示訊息區域是否已滾動以覆蓋其他網格。繪製分隔符號然後使用 msgsep 可能很有用。內建 TUI 繪製一條填滿 sep_char
的完整線條('fillchars' msgsep 欄位)和 hl-MsgSeparator 高亮。botline
設定為大於緩衝區行數的值。scroll_delta
包含自上次發出 win_viewport
以來,視窗頂線移動的距離。它旨在用於實現平滑滾動。為此,它僅計算「虛擬」或「顯示」線,因此折疊僅算作一行。當滾動超過整個螢幕時,它是一個近似值。grid_line
)都會影響新的可視區域,儘管 win_viewport
是在更新之後接收的。實作(例如)平滑滾動的應用程式應考慮到這一點,並使網格與螢幕上顯示的內容分開,並在接收到 win_viewport
後將其複製到可視區域目的地。win_viewport
事件指示的可視區域的一部分。例如,當存在 'winbar' 和浮動視窗邊框時,會發生這種情況。ui_watched
屬性時才會發出。ext_popupmenu
ui-option 啟用。items
是要顯示的完成項目陣列;每個項目都是表單 [word, kind, menu, info] 的陣列,如 complete-items 中所定義,不同之處在於,如果存在 abbr
,則 word
會被取代。selected
是最初選取的項目,即項目陣列中從零開始的索引(如果未選取任何項目,則為 -1)。row
和 col
給出錨點位置,其中將是已完成單字的第一個字元。當使用 ui-multigrid 時,grid
是錨點位置的網格。當 ext_cmdline
處於活動狀態時,grid
設定為 -1,以指示彈出式選單應錨定到外部命令列。然後,col
將是命令列文字中的位元組位置。selected
是上次 popupmenu_show 事件中項目陣列中從零開始的索引,如果未選取任何項目,則為 -1。ext_tabline
ui-option 啟用。curbuf
+ buffers
已在 API7 中新增。curtab:目前標籤頁。tabs:字典列表 [{ "tab": Tabpage, "name": String }, ...] curbuf:目前緩衝區控制碼。buffers:字典列表 [{ "buffer": 緩衝區控制碼, "name": String}, ...]ext_cmdline
ui-option 啟用。content
是應在命令列中顯示的完整內容,而 pos
是命令列中游標的位置。內容分為具有不同高亮屬性的區塊,這些屬性表示為字典(請參閱 ui-event-highlight_set)。firstc
和 prompt
是文字,如果非空,則應顯示在命令列的前面。firstc
始終指示內建命令列,例如 :
(ex 命令)和 /
?
(搜尋),而 prompt
是 input() 提示。indent
告訴內容應縮排多少個空格。<c-r>=
。level
欄位用於區分同時處於活動狀態的不同命令列。第一個調用的命令列的層級為 1,下一個遞迴調用的提示的層級為 2。從 命令列視窗 調用的命令列的層級高於已編輯的命令列。shift
為 true,則應移動游標後的文字,否則應覆寫游標處的字元。lines
是一個高亮區塊行列表,其格式與 "cmdline_show" contents
參數相同。[attr_id, text_chunk]
元組的陣列,建立不同高亮度的訊息文字塊。區塊之間不應新增額外間距,text_chunk
本身包含任何必要的空白。訊息可以包含換行符 "\n"。msg_show
呼叫中的訊息,但任何其他可見訊息都應保持不變。content
的格式與 "msg_show" 中的相同。此事件會傳送空的 content
以隱藏最後一則訊息。content
的格式與 "msg_show" 中的相同。此事件會傳送空的 content
以隱藏最後一則訊息。