Api

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


Nvim API api
Nvim 公開了一個強大的 API,可供外掛程式和外部程序透過 RPCLua 和 Vimscript (eval-api) 使用。
應用程式也可以嵌入 libnvim 直接使用 C API。

API 用法 api-rpc RPC rpc

msgpack-rpc
RPC 是以程式化方式控制 Nvim 的主要方法。Nvim 實作了 MessagePack-RPC 協定,並具有以下額外(超出規範)的限制
1. 回應必須按照請求的反向順序給出(如「解開堆疊」)。2. Nvim 按照接收順序處理所有訊息(請求和通知)。
許多用戶端使用 API:使用者介面 (GUI)、遠端外掛程式、如 "nvr" 等腳本 (https://github.com/mhinz/neovim-remote)。甚至 Nvim 本身也可以控制其他 Nvim 實例。API 用戶端可以
呼叫任何 API 函式
監聽事件
接收來自 Nvim 的遠端呼叫
RPC API 就像 Vim 的「clientserver」功能的更強大版本。
請參閱 channel-intro,了解開啟通道的各種方法。通道開啟函式在選項字典中採用 rpc 鍵。RPC 通道也可以由其他連線到 Nvim 監聽的 TCP/IP sockets 或具名管道的程序開啟。
Nvim 在 啟動時建立一個預設的 RPC socket,由 v:servername 給出。若要改為從 TCP/IP socket 啟動,請使用 --listen 和 TCP 樣式的位址
nvim --listen 127.0.0.1:6666
可以使用 serverstart() 啟動更多端點。
請注意,localhost TCP sockets 通常比具名管道不安全,並可能導致遠端程式碼執行等漏洞。
連線到 socket 是程式設計人員測試 API 最簡單的方法,這可以透過任何 msgpack-rpc 用戶端程式庫或功能完善的 api-client 完成。以下是一個 Ruby 腳本,會在目前的 Nvim 實例中印出「hello world!」
#!/usr/bin/env ruby
# Requires msgpack-rpc: gem install msgpack-rpc
#
# To run this script, execute it from a running Nvim instance (notice the
# trailing '&' which is required since Nvim won't process events while
# running a blocking command):
#
#   :!./hello.rb &
#
# Or from another shell by setting NVIM_LISTEN_ADDRESS:
# $ NVIM_LISTEN_ADDRESS=[address] ./hello.rb
require 'msgpack/rpc'
require 'msgpack/rpc/transport/unix'
nvim = MessagePack::RPC::Client.new(MessagePack::RPC::UNIXTransport.new, ENV['NVIM_LISTEN_ADDRESS'])
result = nvim.call(:nvim_command, 'echo "hello world!"')
更好的方法是使用具有 "pynvim" 套件的 Python REPL,可以在其中互動地呼叫 API 函式
>>> from pynvim import attach
>>> nvim = attach('socket', path='[address]')
>>> nvim.command('echo "hello world!"')
您也可以透過 jobstart() 嵌入 Nvim,並使用 rpcrequest()rpcnotify() 進行通訊
let nvim = jobstart(['nvim', '--embed'], {'rpc': v:true})
echo rpcrequest(nvim, 'nvim_eval', '"Hello " . "world!"')
call jobstop(nvim)

API 定義 api-definitions

api-types
Nvim C API 為所有函式參數定義了自訂型別。有些只是 C99 標準型別的 typedef,另一些則是 Nvim 定義的資料結構。
基本型別
API Type                              C type
------------------------------------------------------------------------
Nil
Boolean                               bool
Integer (signed 64-bit integer)       int64_t
Float (IEEE 754 double precision)     double
String                                {char* data, size_t size} struct
Array                                 kvec
Dict (msgpack: map)                   kvec
Object                                any of the above
注意
空陣列可接受為有效的字典參數。
函式無法跨越 RPC 邊界。但是 API 函式(例如 nvim_create_autocmd())可以支援非 RPC 調用的 Lua 函式參數。
特殊型別 (msgpack EXT)
這些是區分為獨立物件子型別的整數 typedef。它們可以視為不透明的整數,但彼此不相容:Buffer 可以做為整數傳遞,但不能做為 Window 或 Tabpage 傳遞。
EXT 物件資料是(整數)物件控制代碼。在 api-metadata types 鍵中給定的 EXT 型別代碼是穩定的:它們不會變更,因此是向前相容的。
EXT Type      C type                                  Data
------------------------------------------------------------------------
Buffer        enum value kObjectTypeBuffer            |bufnr()|
Window        enum value kObjectTypeWindow            |window-ID|
Tabpage       enum value kObjectTypeTabpage           internal handle
api-indexing
大多數 API 使用以 0 為基底的索引,且範圍是結束不包含的。對於範圍的結尾,-1 表示最後一行/欄。
例外:以下 API 函式使用「標記式」索引(以 1 為基底的行,以 0 為基底的欄)
例外:以下 API 函式使用 extmarks 索引(以 0 為基底的索引,結束包含)
api-fast
大多數 API 函式都是「延遲的」:它們在主迴圈中排隊,並與正常輸入依序處理。因此,如果編輯器以「模式」方式等待使用者輸入(例如 hit-enter-prompt),請求將會封鎖。非延遲(快速)函式(例如 nvim_get_mode()nvim_input())會立即提供服務(即,無需在輸入佇列中等待)。Lua 程式碼可以使用 vim.in_fast_event() 來偵測快速環境。

API 元資料 api-metadata

Nvim C API 會由建置系統自動公開給 RPC,該系統會剖析 src/nvim/api/* 中的標頭,並產生將 RPC API 方法名稱對應到公用 C API 函式的分派函式,並轉換/驗證引數和傳回值。
Nvim 會將其 API 元資料公開為具有這些項目的字典
version Nvim 版本、API 層級/相容性
version.api_level API 版本整數 api-level
version.api_compatible API 與此層級向後相容
version.api_prerelease 將 API 宣告為不穩定/未發布 (version.api_prerelease && fn.since == version.api_level)
functions API 函式簽名,包含描述傳回值和參數的 api-types 資訊。
ui_events UI 事件簽名
ui_options 支援的 ui-options
{fn}.since 函式 {fn} 被引入的 API 層級
{fn}.deprecated_since 函式 {fn} 被棄用的 API 層級
types 由 Nvim 定義的自訂控制代碼型別
error_types API 函式可能傳回的錯誤型別
關於 functions 對應
容器型別可以使用型別/大小限制來裝飾,例如 ArrayOf(Buffer) 或 ArrayOf(Integer, 2)。
被認為是在 Nvim 特殊型別 (msgpack EXT) 實例上運作的方法的函式具有 "method=true" 旗標。接收者型別是第一個引數的型別。方法名稱會加上 nvim_ 以及型別名稱的前置詞,例如 nvim_buf_get_lines 是 Buffer 實例的 get_lines 方法。dev-api
全域函式具有 "method=false" 旗標,且僅以 nvim_ 作為前置詞,例如 nvim_list_bufs
api-mapping
外部程式(用戶端)可以使用元資料來探索 API,使用以下任何方法
1. 連線到執行中的 Nvim 實例,並透過 msgpack-RPC 呼叫 nvim_get_api_info()。這最適合以動態語言撰寫,可以在執行階段定義函式的用戶端。
2. 以 --api-info 啟動 Nvim。適用於靜態編譯的用戶端。範例(需要 Python "pyyaml" 和 "msgpack-python" 模組)
nvim --api-info | python -c 'import msgpack, sys, yaml; yaml.dump(msgpack.unpackb(sys.stdin.buffer.read()), sys.stdout)'
3. 使用 api_info() Vimscript 函式。
:lua vim.print(vim.fn.api_info())
使用 filter() 排除非棄用 API 函式的範例
:new|put =map(filter(api_info().functions, '!has_key(v:val,''deprecated_since'')'), 'v:val.name')

API 合約 api-contract

Nvim API 由函式和事件組成。
用戶端呼叫如 api-global 所述的函式。
用戶端可以訂閱 ui-eventsapi-buffer-updates 等。
API 函式名稱會加上 "nvim_" 的前置詞。
API 事件名稱會加上 "nvim_" 的前置詞,並加上 "_event" 的後置詞。
隨著 Nvim 的發展,API 可能會依循此合約進行變更
可能會新增新的函式和事件。
任何此類擴充都是選用的:舊用戶端可以忽略它們。
函式簽名將不會變更(發佈後)。
在開發(未發布)版本中引入的函式可能會變更。(用戶端可以動態檢查 api_prereleaseapi-metadata
事件參數不會移除或重新排序(發佈後)。
事件可以擴充:可以新增新的參數。
可能會將新項目新增到函式和事件的對應/清單參數/結果。
任何此類新項目都是選用的:舊用戶端可以忽略它們。
現有項目不會移除(發佈後)。
已棄用的函式在 Nvim 2.0 版之前不會移除
「私人」介面不在此合約的涵蓋範圍內
任何種類的未記錄(不在 :help 中)函式或事件
nvim__x(「雙底線」)函式
用 Rich Hickey 的話來說,這個概念是「無版本的演變」
放寬需求應為相容的變更。
加強承諾應為相容的變更。

全域事件 api-global-events

當用戶端將 API 請求當做非同步通知調用時,Nvim 無法傳送錯誤回應。相反地,在發生錯誤時,會將下列通知傳送給用戶端
nvim_error_event
nvim_error_event[{type}, {message}]
{type} 是由 api_info().error_types 定義的數值 ID,而 {message} 是包含錯誤訊息的字串。

緩衝區更新事件 api-buffer-updates

API 用戶端可以「附加」到 Nvim 緩衝區,以訂閱緩衝區更新事件。這類似於 TextChanged,但功能更強大且更精細。
呼叫 nvim_buf_attach() 以接收通道上的這些事件
nvim_buf_lines_event
nvim_buf_lines_event[{buf}, {changedtick}, {firstline}, {lastline}, {linedata}, {more}]
{firstline}{lastline} 之間的緩衝區文字(不包含 {lastline},從零開始索引)被 {linedata} 列表中的新文字取代時。變更的粒度是以行為單位,也就是說,如果編輯器中只變更了一個字元,則會傳送整行。
{changedtick}v:null 時,表示螢幕上的行(顯示)已變更,但緩衝區內容沒有變更。{linedata} 包含已變更的螢幕行。當 'inccommand' 顯示緩衝區預覽時會發生這種情況。
屬性
{buf} API 緩衝區控制代碼(緩衝區編號)
{changedtick} 緩衝區的 b:changedtick 值。如果您將 API 命令傳回給 nvim,您可以檢查您的請求中的 b:changedtick 值,以確保沒有其他變更發生。
{firstline} 被取代的第一行的整數行號。從零開始索引:如果第 1 行被取代,則 {firstline} 將為 0,而不是 1。{firstline} 始終小於或等於行被取代前緩衝區中的行數。
{lastline} 未被取代的第一行的整數行號(即範圍 {firstline}, {lastline} 不包含 {lastline})。從零開始索引:如果第 2 行到第 5 行被取代,則此值將為 5,而不是 6。{lastline} 始終小於或等於行被取代前緩衝區中的行數。如果事件是附加後的初始更新的一部分,則 {lastline} 將為 -1。
{linedata} 字串列表,包含新緩衝區行的內容。省略了換行符號;空行以空字串傳送。
{more} 布林值,對於「多部分」變更通知為 true:目前的變更已分成多個 nvim_buf_lines_event 通知(例如,因為它太大了)。
nvim_buf_changedtick_event[{buf}, {changedtick}] nvim_buf_changedtick_event
b:changedtick 遞增但沒有文字變更時。與還原/重做相關。
屬性
{buf} API 緩衝區控制代碼(緩衝區編號) {changedtick} 緩衝區的 b:changedtick 新值
nvim_buf_detach_event[{buf}] nvim_buf_detach_event
當緩衝區被分離時(即,停用更新)。由 nvim_buf_detach() 明確觸發,或在下列情況下隱含觸發
緩衝區被放棄且未設定'hidden'
緩衝區被重新載入,例如,使用 :edit 或外部變更觸發 :checktime'autoread'
一般來說:無論何時從記憶體卸載緩衝區內容時。
屬性
{buf} API 緩衝區控制代碼(緩衝區編號)
範例
在空白緩衝區上呼叫 send_buffer=true 的 nvim_buf_attach(),會發出
nvim_buf_lines_event[{buf}, {changedtick}, 0, -1, [""], v:false]
使用者向緩衝區新增兩行,會發出
nvim_buf_lines_event[{buf}, {changedtick}, 0, 0, ["line1", "line2"], v:false]
使用者移動到包含文字「Hello world」的行並插入「!」,會發出
nvim_buf_lines_event[{buf}, {changedtick}, {linenr}, {linenr} + 1,
                     ["Hello world!"], v:false]
使用者移動到第 3 行,並使用「20dd」刪除 20 行,會發出
nvim_buf_lines_event[{buf}, {changedtick}, 2, 22, [], v:false]
使用者使用行模式視覺模式選取第 3-5 行,然後輸入「p」貼上 6 行區塊,會發出
nvim_buf_lines_event[{buf}, {changedtick}, 2, 5,
  ['pasted line 1', 'pasted line 2', 'pasted line 3', 'pasted line 4',
   'pasted line 5', 'pasted line 6'],
  v:false
]
使用者使用「:edit」重新載入緩衝區,會發出
nvim_buf_detach_event[{buf}]
LUA
api-buffer-updates-lua
處理程序內的 Lua 外掛程式可以 Lua 回呼的形式接收緩衝區更新。這些回呼會經常在各種情況下呼叫;textlock 會防止變更緩衝區內容和視窗版面配置(請改用 vim.schedule() 將這類操作延遲到主迴圈)。允許移動游標,但之後會還原。
nvim_buf_attach() 將會取得回呼的關鍵字引數。「on_lines」將接收參數(「lines」,{buf}{changedtick}{firstline}{lastline}{new_lastline}{old_byte_size} [,{old_utf32_size}{old_utf16_size}])。與遠端通道事件不同,不會傳遞文字內容。可以在回呼內存取新的文字,如下所示
vim.api.nvim_buf_get_lines(buf, firstline, new_lastline, true)
{old_byte_size} 是取代區域 {firstline}{lastline} 的總大小(以位元組為單位),包括 {lastline} 之後的最終換行符號。如果 utf_sizesnvim_buf_attach() 關鍵字引數中設為 true,則刪除區域的 UTF-32 和 UTF-16 大小也會以額外引數 {old_utf32_size}{old_utf16_size} 傳遞。
b:changedtick 遞增但沒有文字變更時,會叫用「on_changedtick」。接收到的參數為(「changedtick」,{buf}{changedtick})。
api-lua-detach
處理程序內 Lua 回呼可以傳回 true 來分離。這會分離所有使用相同 nvim_buf_attach() 呼叫附加的回呼。

緩衝區醒目提示 api-highlights

Nvim 允許外掛程式將基於位置的醒目提示新增至緩衝區。這類似於 matchaddpos(),但有一些關鍵差異。新增的醒目提示與緩衝區相關聯,並適應行插入和刪除,類似於符號。也可以將一組醒目提示作為一個群組管理,並一次全部刪除或取代。
預期的使用案例是監控緩衝區變更的 linter 或語義醒目提示外掛程式,並在背景中計算緩衝區的醒目提示。另一個使用案例是在僅附加緩衝區中顯示輸出的外掛程式,並想要將醒目提示新增至輸出。醒目提示資料無法在將緩衝區寫入和載入檔案時保留,也不能在還原/重做循環中保留。
醒目提示使用 nvim_buf_add_highlight() 函式註冊。如果外部醒目提示外掛程式想要批量新增許多醒目提示,則可以先(同步)要求來源 ID,然後以非同步通知方式呼叫 nvim_buf_add_highlight(),藉此提升效能。
nvim_buf_add_highlight() 會以 extmarks 的方式新增醒目提示。如果需要在新增醒目提示後追蹤或操作醒目提示,最好直接使用 nvim_buf_set_extmark(),因為此函式會傳回已放置的 extmark ID。因此,而不是
vim.api.nvim_buf_add_highlight(buf, ns_id, hl_group, line, col_start, col_end)
使用
-- create the highlight through an extmark
extid = vim.api.nvim_buf_set_extmark(buf, ns_id, line, col_start, {end_col = col_end, hl_group = hl_group})
-- example: modify the extmark's highlight group
vim.api.nvim_buf_set_extmark(buf, ns_id, line, col_start, {end_col = col_end, hl_group = NEW_HL_GROUP, id = extid})
-- example: change the highlight's position
vim.api.nvim_buf_set_extmark(buf, ns_id, NEW_LINE, col_start, {end_col = col_end, hl_group = NEW_HL_GROUP, id = extid})
使用 Python API 用戶端 (pynvim) 的範例
src = vim.new_highlight_source()
buf = vim.current.buffer
for i in range(5):
    buf.add_highlight("String",i,0,-1,src_id=src)
# some time later ...
buf.clear_namespace(src)
如果不需要刪除或更新醒目提示,只需將 -1 作為 src_id 傳遞即可(這是 Python 中的預設值)。使用 nvim_buf_clear_namespace() 從特定來源清除醒目提示,可以在特定的行範圍或整個緩衝區中執行此操作,方法是傳遞行範圍 0, -1(後者是 Python 中的預設值,如上所示)。
使用 Vimscript 中的 API 範例
call nvim_buf_set_lines(0, 0, 0, v:true, ["test text"])
let src = nvim_buf_add_highlight(0, 0, "String", 1, 0, 4)
call nvim_buf_add_highlight(0, src, "Identifier", 0, 5, -1)
" some time later ...
call nvim_buf_clear_namespace(0, src, 0, -1)

浮動視窗 api-floatwin

浮動視窗(「浮動」)顯示在一般視窗上方。這對於實作簡單的小工具很有用,例如顯示在游標旁的工具提示。浮動是完全正常運作的視窗,支援使用者編輯、常見的 api-window 呼叫和大多數視窗選項('statusline' 除外)。
建立浮動視窗的兩種方式
nvim_open_win() 建立新的視窗(需要緩衝區,請參閱 nvim_create_buf()
nvim_win_set_config() 將一般視窗重新設定為浮動視窗
若要關閉它,請使用 nvim_win_close():close 等命令。
若要檢查視窗是否為浮動,請檢查其組態中的 relative 選項是否為非空白
if vim.api.nvim_win_get_config(window_id).relative ~= '' then
  -- window with this window_id is floating
end
可以使用典型的機制(語法醒目提示、api-highlights)醒目提示緩衝區文字。hl-NormalFloat 群組會醒目提示一般文字;可以使用 'winhighlight' 像平常一樣在本機覆寫群組。浮動會從目前的視窗繼承選項;在 nvim_open_win() 中指定 style=minimal 可以停用各種視覺功能,例如 'number' 欄。
浮動視窗特定的其他醒目提示群組
hl-FloatBorder 用於視窗的邊框
hl-FloatTitle 用於視窗的標題
hl-FloatFooter 用於視窗的頁尾
目前,浮動視窗不支援某些小工具,例如捲軸。
:mksession 的輸出不包含還原浮動視窗的命令。
範例:使用 scratch 緩衝區建立浮動視窗
let buf = nvim_create_buf(v:false, v:true)
call nvim_buf_set_lines(buf, 0, -1, v:true, ["test", "text"])
let opts = {'relative': 'cursor', 'width': 10, 'height': 2, 'col': 0,
    \ 'row': 1, 'anchor': 'NW', 'style': 'minimal'}
let win = nvim_open_win(buf, 0, opts)
" optional: change highlight, otherwise Pmenu is used
call nvim_set_option_value('winhl', 'Normal:MyHighlight', {'win': win})
擴充標記 (extmarks) 表示緩衝區註解,可追蹤緩衝區中的文字變更。它們可以表示游標、折疊、拼錯的字詞,以及任何需要在緩衝區中隨著時間追蹤邏輯位置的事物。api-indexing
Extmark 位置的作用就像「垂直線」游標:它存在於字元之間。因此,一行上的最大 extmark 索引比字元索引大 1
 f o o b a r      line contents
 0 1 2 3 4 5      character positions (0-based)
0 1 2 3 4 5 6     extmark positions (0-based)
Extmark 具有「向前重力」:如果您將游標直接放置在 extmark 位置並輸入一些文字,extmark 會向前移動。
f o o|b a r      line (| = cursor)
     3           extmark
f o o z|b a r    line (| = cursor)
       4         extmark (after typing "z")
如果 extmark 位於行的最後一個索引上,並且您在該點輸入換行符號,則 extmark 會相應地移動到下一行
f o o z b a r|   line (| = cursor)
             7   extmark
f o o z b a r    first line
                 extmarks (none present)
|                second line (| = cursor)
0                extmark (after typing <CR>)
範例
讓我們在第一列 (row=0) 和第三欄 (column=2) 設定一個 extmark。api-indexing 傳遞 id=0 會建立新的標記並傳回 id
  01 2345678
0 ex|ample..
    ^ extmark position
let g:mark_ns = nvim_create_namespace('myplugin')
let g:mark_id = nvim_buf_set_extmark(0, g:mark_ns, 0, 2, {})
我們可以透過其 id 取得標記
echo nvim_buf_get_extmark_by_id(0, g:mark_ns, g:mark_id, {})
" => [0, 2]
我們可以透過命名空間(或範圍)取得緩衝區中的所有標記
echo nvim_buf_get_extmarks(0, g:mark_ns, 0, -1, {})
" => [[1, 0, 2]]
刪除所有周圍文字不會移除 extmark!若要移除 extmark,請使用 nvim_buf_del_extmark()。刪除我們範例中的「x」
  0 12345678
0 e|ample..
   ^ extmark position
echo nvim_buf_get_extmark_by_id(0, g:mark_ns, g:mark_id, {})
" => [0, 1]
注意:Extmark 的「重力」決定了文字編輯後它將如何移動。請參閱 nvim_buf_set_extmark()
命名空間允許任何外掛程式只管理自己的 extmark,並忽略另一個外掛程式建立的 extmark。
透過編輯變更的 Extmark 位置會在還原/重做時還原。建立和刪除 extmark 不是緩衝區變更,因此不會為 extmark 變更建立新的還原狀態。

全域函式 api-global

nvim_chan_send({chan}, {data}) nvim_chan_send()
將資料傳送至通道 id。對於工作,它會將其寫入程序的 stdin。對於 stdio 通道 channel-stdio,它會寫入 Nvim 的 stdout。對於內部終端機執行個體 (nvim_open_term()),它會直接寫入終端機輸出。如需詳細資訊,請參閱 channel-bytes
此函式會寫入原始資料,而不是 RPC 訊息。如果使用 rpc=true 建立通道,則通道會預期 RPC 訊息,請改用 vim.rpcnotify()vim.rpcrequest()
屬性
RPC 僅限 Lua vim.api 僅限
參數
{chan} 通道的 id
{data} 要寫入的資料。8 位元清除:可以包含 NUL 位元組。
nvim_create_buf({listed}, {scratch}) nvim_create_buf()
建立新的空白、未命名緩衝區。
參數
{listed} 設定 'buflisted'
{scratch} 建立用於暫時工作的「拋棄式」scratch-buffer(始終為 'nomodified')。還會在緩衝區上設定 'nomodeline'
傳回
緩衝區控制代碼,錯誤時為 0
另請參閱
buf_open_scratch
nvim_del_current_line() nvim_del_current_line()
刪除目前行。
屬性
textlock 啟用時不允許使用
nvim_del_keymap({mode}, {lhs}) nvim_del_keymap()
取消指定模式的全局 映射
要取消緩衝區本地映射,請使用 nvim_buf_del_keymap()
另請參閱
nvim_del_mark({name}) nvim_del_mark()
刪除大寫/檔案命名的標記。 請參閱 mark-motions
注意
小寫名稱(或其他緩衝區本地標記)會產生錯誤。
參數
{name} 標記名稱
傳回
如果已刪除標記則為 true,否則為 false。
nvim_del_var({name}) nvim_del_var()
移除全局 (g:) 變數。
參數
{name} 變數名稱
nvim_echo({chunks}, {history}, {opts}) nvim_echo()
顯示訊息。
參數
{chunks} 一個 [text, hl_group] 陣列的列表,每個都代表一個帶有指定高亮的文字區塊。可以省略 hl_group 元素以表示沒有高亮。
{history} 如果為 true,則新增至 message-history
{opts} 可選參數。
verbose: 如果 Nvim 使用 -V3log_file 叫用,訊息會因 'verbose' 選項而被列印為結果,訊息將被重新導向到 log_file,並從直接輸出中隱藏。
nvim_err_write({str}) nvim_err_write()
將訊息寫入 Vim 錯誤緩衝區。不會附加「\n」,訊息會被緩衝(不會顯示),直到寫入換行符號為止。
參數
{str} 訊息
nvim_err_writeln({str}) nvim_err_writeln()
將訊息寫入 Vim 錯誤緩衝區。附加「\n」,因此緩衝區會被刷新(並顯示)。
參數
{str} 訊息
另請參閱
nvim_err_write()
nvim_eval_statusline({str}, {opts}) nvim_eval_statusline()
評估狀態列字串。
屬性
api-fast
參數
{str} 狀態列字串(請參閱 'statusline')。
{opts} 可選參數。
winid: (數字) 要用作狀態列上下文的視窗 視窗 ID
maxwidth: (數字) 狀態列的最大寬度。
fillchar: (字串) 用於填滿狀態列中空白的字元(請參閱 'fillchars')。即使不是單一寬度,也會被視為單一寬度。
highlights: (布林值) 傳回高亮資訊。
use_winbar: (布林值) 評估 winbar 而不是狀態列。
use_tabline: (布林值) 評估標籤列而不是狀態列。如果為 true,則忽略 {winid}。與 {use_winbar} 互斥。
use_statuscol_lnum: (數字) 為此行號評估狀態列而不是狀態列。
傳回
包含狀態列資訊的字典,包含以下鍵
str: (字串) 將顯示在狀態列上的字元。
width: (數字) 狀態列的顯示寬度。
highlights: 包含狀態列高亮資訊的陣列。只有當 {opts} 中的 "highlights" 鍵為 true 時才會包含。陣列的每個元素都是一個 字典,包含以下鍵
start: (數字) 使用高亮的第一个字元的位元組索引(從 0 開始)。
group: (字串) 高亮群組的名稱。
nvim_exec_lua({code}, {args}) nvim_exec_lua()
執行 Lua 程式碼。參數(如果有)可以作為區塊內的 ... 使用。區塊可以傳回值。
僅執行語句。要評估運算式,請在其前面加上 return:return my_function(...)
屬性
RPC 限定
參數
{code} 要執行的 Lua 程式碼
{args} 程式碼的參數
傳回
如果存在 Lua 程式碼的傳回值或 NIL。
nvim_feedkeys({keys}, {mode}, {escape_ks}) nvim_feedkeys()
將輸入按鍵傳送到 Nvim,並受到 mode 旗標控制的各種怪異行為影響。這是一個封鎖式呼叫,與 nvim_input() 不同。
執行錯誤時:不會失敗,但會更新 v:errmsg。
若要輸入類似 <C-o> 的序列,請使用 nvim_replace_termcodes()(通常使用 escape_ks=false)來取代 鍵碼,然後將結果傳遞給 nvim_feedkeys()。
範例
:let key = nvim_replace_termcodes("<C-o>", v:true, v:false, v:true)
:call nvim_feedkeys(key, 'n', v:false)
參數
{keys} 要輸入的按鍵
{mode} 行為旗標,請參閱 feedkeys()
{escape_ks} 如果為 true,則在 keys 中跳脫 K_SPECIAL 位元組。如果您已經使用 nvim_replace_termcodes(),則此值應為 false,否則應為 true。
另請參閱
feedkeys()
vim_strsave_escape_ks
nvim_get_api_info() nvim_get_api_info()
傳回一個 2 元組(陣列),其中項目 0 是目前的通道 ID,項目 1 是 api-metadata 對應 (字典)。
屬性
api-fast RPC 限定
傳回
2 元組 [{channel-id}, {api-metadata}]
nvim_get_chan_info({chan}) nvim_get_chan_info()
取得有關通道的資訊。
參數
{chan} channel_id,或 0 表示目前通道
傳回
通道資訊字典,包含以下鍵
"id" 通道 ID。
"argv" (可選) 工作引數清單。
"stream" 通道底層的串流。
"stdio" 此 Nvim 實例的 stdin 和 stdout
"stderr" 此 Nvim 實例的 stderr
"socket" TCP/IP socket 或具名管道
"job" 工作,透過其 stdio 進行通訊。
"mode" 如何解譯通道上接收到的資料。
"bytes" 發送和接收原始位元組。
"terminal" 終端機 實例解譯 ASCII 序列。
"rpc" 通道上作用中的 RPC 通訊。
"pty" (可選) 偽終端機的名稱。在 POSIX 系統上,這是類似 "/dev/pts/1" 的裝置路徑。如果未知,如果使用 pty(例如 Windows 上的 conpty),則該鍵仍然存在。
"buffer" (可選) 連接到 終端機 實例的緩衝區。
"client" (可選) 有關對等點(RPC 通道另一端的用戶端)的資訊,它透過 nvim_set_client_info() 提供。
nvim_get_color_by_name({name}) nvim_get_color_by_name()
傳回 nvim_get_color_map() 顏色名稱或 "#rrggbb" 十六進制字串的 24 位元 RGB 值。
範例
:echo nvim_get_color_by_name("Pink")
:echo nvim_get_color_by_name("#cbcbcb")
參數
{name} 顏色名稱或 "#rrggbb" 字串
傳回
24 位元 RGB 值,或對於無效引數傳回 -1。
nvim_get_color_map() nvim_get_color_map()
傳回顏色名稱和 RGB 值的對應。
鍵為顏色名稱(例如「Aqua」),值為 24 位元 RGB 顏色值(例如 65535)。
傳回
顏色名稱和 RGB 值的對應。
nvim_get_context({opts}) nvim_get_context()
取得目前編輯器狀態的對應。
參數
{opts} 可選參數。
types: 要收集的 上下文類型(「regs」、「jumps」、「bufs」、「gvars」...)清單,或對於「全部」則為空。
傳回
全局 上下文 的對應。
nvim_get_current_buf() nvim_get_current_buf()
取得目前的緩衝區。
傳回
緩衝區控制代碼
nvim_get_current_line() nvim_get_current_line()
取得目前行。
傳回
目前行字串
nvim_get_current_tabpage() nvim_get_current_tabpage()
取得目前的標籤頁。
傳回
標籤頁控制代碼
nvim_get_current_win() nvim_get_current_win()
取得目前的視窗。
傳回
視窗控制代碼
nvim_get_hl({ns_id}, {opts}) nvim_get_hl()
取得命名空間中的所有或特定高亮群組。
注意
當高亮定義對應中定義了 link 屬性時,其他屬性將不會生效(請參閱 :hi-link)。
參數
{ns_id} 取得命名空間 ns_id 的高亮群組 nvim_get_namespaces()。使用 0 來取得全局高亮群組 :highlight
{opts} 選項字典
name: (字串) 依名稱取得高亮定義。
id: (整數) 依 ID 取得高亮定義。
link: (布林值,預設為 true) 顯示連結的群組名稱而不是有效定義 :hi-link
create: (布林值,預設為 true) 當高亮群組不存在時建立它。
傳回
高亮群組,格式為從群組名稱到 nvim_set_hl() 中高亮定義對應的對應,或如果依名稱或 ID 請求,則僅為單一高亮定義對應。
nvim_get_hl_id_by_name({name}) nvim_get_hl_id_by_name()
依名稱取得高亮群組
類似於 hlID(),但如果不存在則會配置新的 ID。
nvim_get_hl_ns({opts}) nvim_get_hl_ns()
取得作用中的高亮命名空間。
參數
{opts} 可選參數
winid: (數字) 用於擷取視窗高亮命名空間的 視窗 ID。當未呼叫 nvim_win_set_hl_ns() 呼叫視窗時(或使用命名空間 -1 呼叫時),會傳回值 -1。
傳回
命名空間 ID,或 -1
nvim_get_keymap({mode}) nvim_get_keymap()
取得全局(非緩衝區本地)映射定義的清單。
參數
{mode} 模式簡稱(「n」、「i」、「v」...)
傳回
描述映射的 maparg() 類似字典的陣列。「buffer」鍵始終為零。
nvim_get_mark({name}, {opts}) nvim_get_mark()
傳回一個 (row, col, buffer, buffername) 元組,表示大寫/檔案命名的標記的位置。「行尾」的欄位置會傳回為 v:maxcol(很大的數字)。請參閱 mark-motions
標記是從 (1,0) 開始編號的。api-indexing
注意
小寫名稱(或其他緩衝區本地標記)會產生錯誤。
參數
{name} 標記名稱
{opts} 可選參數。保留供日後使用。
傳回
4 元組 (row, col, buffer, buffername),如果未設定標記則為 (0, 0, 0, '')。
nvim_get_mode() nvim_get_mode()
取得目前的模式。mode() 「blocking」 如果 Nvim 正在等待輸入則為 true。
屬性
api-fast
傳回
字典 { "mode": 字串, "blocking": 布林值 }
nvim_get_proc({pid}) nvim_get_proc()
取得描述程序 pid 的資訊。
傳回
程序屬性的對應,如果找不到程序則為 NIL。
nvim_get_proc_children({pid}) nvim_get_proc_children()
取得程序 pid 的直接子程序。
傳回
子程序 ID 的陣列,如果找不到程序則為空。
nvim_get_runtime_file({name}, {all}) nvim_get_runtime_file()
在 runtime 目錄中,按照 'runtimepath' 的順序尋找檔案。
"name" 可以包含萬用字元。例如 nvim_get_runtime_file("colors/*.{vim,lua}", true) 將會回傳所有顏色配置檔案。無論平台為何,在子目錄的搜尋模式中請總是使用正斜線 (/)。
找不到任何檔案並不是錯誤。這時會回傳一個空陣列。
屬性
api-fast
參數
{name} 要搜尋的檔案模式
{all} 是否回傳所有符合的檔案,或者只回傳第一個
傳回
找到的檔案的絕對路徑列表
nvim_get_var({name}) nvim_get_var()
取得全域 (g:) 變數。
參數
{name} 變數名稱
傳回
變數值
nvim_get_vvar({name}) nvim_get_vvar()
取得 v: 變數。
參數
{name} 變數名稱
傳回
變數值
nvim_input({keys}) nvim_input()
將原始使用者輸入加入佇列。與 nvim_feedkeys() 不同,此函數使用底層輸入緩衝區,且此呼叫是非阻塞的(輸入由事件迴圈非同步處理)。
要輸入文字區塊,nvim_paste() 快得多,應優先使用。
執行錯誤時:不會失敗,但會更新 v:errmsg。
注意
鍵碼,例如 <CR> 會被翻譯,因此 "<" 是特殊的。要輸入字面上的 "<",請傳送 <LT>
對於滑鼠事件,請使用 nvim_input_mouse()。自 api-level 6 起,偽鍵形式 <LeftMouse><col,row> 已被棄用。
屬性
api-fast
參數
{keys} 要輸入的按鍵
傳回
實際寫入的位元組數(如果緩衝區滿了,可能少於請求的位元組數)。
nvim_input_mouse()
nvim_input_mouse({button}, {action}, {modifier}, {grid}, {row}, {col}) 從 GUI 傳送滑鼠事件。
非阻塞:不會等待任何結果,但會將事件加入佇列,以便事件迴圈儘快處理。
注意
目前,此函數不支援透過在迴圈中多次呼叫來「腳本化」多個滑鼠事件:中間的滑鼠位置將被忽略。它應該用於在 GUI 中實現即時滑鼠輸入。已棄用的偽鍵形式 (<LeftMouse><col,row>) 的 nvim_input() 也有相同的限制。
屬性
api-fast
參數
{button} 滑鼠按鈕:為 "left"、"right"、"middle"、"wheel"、"move"、"x1"、"x2" 其中之一。
{action} 對於一般按鈕,為 "press"、"drag"、"release" 其中之一。對於滾輪,為 "up"、"down"、"left"、"right" 其中之一。"move" 會被忽略。
{modifier} 以單一字元表示的修飾符字串。與按鍵相同的規範器被使用,除了 "-" 分隔符號是可選的,因此 "C-A-"、"c-a" 和 "CA" 都可以用來指定 Ctrl+Alt+點擊。
{grid} 如果客戶端使用 ui-multigrid,則為格線編號,否則為 0。
{row} 滑鼠列位置(從零開始,類似於重繪事件)
{col} 滑鼠欄位置(從零開始,類似於重繪事件)
nvim_list_bufs() nvim_list_bufs()
取得目前的緩衝區控制代碼列表
包括未列出 (未載入/已刪除) 的緩衝區,例如 :ls!。使用 nvim_buf_is_loaded() 來檢查緩衝區是否已載入。
傳回
緩衝區控制代碼列表
nvim_list_chans() nvim_list_chans()
取得有關所有開啟通道的資訊。
傳回
字典陣列,每個字典都以 nvim_get_chan_info() 指定的格式描述一個通道。
nvim_list_runtime_paths() nvim_list_runtime_paths()
取得 runtime-search-path 中包含的路徑。
傳回
路徑列表
nvim_list_tabpages() nvim_list_tabpages()
取得目前的標籤頁控制代碼列表。
傳回
標籤頁控制代碼列表
nvim_list_uis() nvim_list_uis()
取得代表已附加 UI 的字典列表。
傳回
UI 字典陣列,每個字典都有這些鍵
"height" UI 要求的最大高度
"width" UI 要求的最大寬度
"rgb" 如果 UI 使用 RGB 顏色則為 true (false 表示 cterm-colors)
"ext_..." 要求的 UI 擴充功能,請參閱 ui-option
"chan" 遠端 UI 的 channel-id
nvim_list_wins() nvim_list_wins()
取得目前的視窗控制代碼列表。
傳回
視窗控制代碼列表
nvim_load_context({dict}) nvim_load_context()
根據給定的 context 對應表設定目前的編輯器狀態。
參數
{dict} Context 對應表。
nvim_notify({msg}, {log_level}, {opts}) nvim_notify()
使用訊息通知使用者
將呼叫轉發到 vim.notify。預設情況下,會在 echo 區域中轉發您的訊息,但可以被覆寫以觸發桌面通知。
參數
{msg} 要顯示給使用者的訊息
{log_level} 日誌級別
{opts} 保留以供未來使用。
nvim_open_term({buffer}, {opts}) nvim_open_term()
在緩衝區中開啟一個終端機實例
預設情況下(目前也是唯一的選項),終端機不會連接到外部程序。相反,在通道上傳送的輸入將會由終端機直接回顯。這對於顯示作為 RPC 訊息一部分回傳的 ANSI 終端序列或類似內容非常有用。
注意:若要使用正確的大小直接初始化終端機,請先在已設定的視窗中顯示緩衝區,然後再呼叫此函數。例如,對於浮動顯示器,請先使用 nvim_create_buf() 建立一個空的緩衝區,然後使用 nvim_open_win() 顯示它,然後再呼叫此函數。接著可以立即呼叫 nvim_chan_send() 以處理具有預期大小的虛擬終端機中的序列。
屬性
textlock 啟用時不允許使用
參數
{buffer} 要使用的緩衝區(預期為空)
{opts} 可選參數。
on_input:用於傳送輸入的 Lua 回調,例如終端模式下的按鍵。注意:按鍵會以原始形式傳送,就像傳送到 PTY 主端一樣。例如,換行符會以 "\r" 傳送,而不是 "\n"。適用 textlock。但是,可以在回調中直接呼叫 nvim_chan_send()["input", term, bufnr, data]
force_crlf:(布林值,預設為 true) 將 "\n" 轉換為 "\r\n"。
傳回
通道 ID,錯誤時為 0
nvim_out_write({str}) nvim_out_write()
將訊息寫入 Vim 輸出緩衝區。不會附加 "\n",訊息會被緩衝(不會顯示),直到寫入換行符為止。
參數
{str} 訊息
nvim_paste({data}, {crlf}, {phase}) nvim_paste()
在游標處貼上 (任何模式),並設定 "redo",因此點 (.) 將會重複輸入。UI 呼叫此函數來實作「貼上」,但它也適用於腳本輸入大型、可點擊重複的文字區塊 (與 nvim_input() 相反,後者會受到對應/事件的影響,因此速度會慢得多)。
調用 vim.paste() 處理常式,該處理常式會適當地處理每個模式。
錯誤 ('nomodifiable'vim.paste() 失敗、…) 會在 err 中反映,但不影響回傳值 (回傳值嚴格由 vim.paste() 決定)。發生錯誤或取消時,會忽略後續呼叫 (“排空”),直到下一次貼上開始 (階段 1 或 -1)。
適用於對應和腳本以插入多行文字。範例
vim.keymap.set('n', 'x', function()
  vim.api.nvim_paste([[
    line1
    line2
    line3
  ]], false, -1)
end, { buffer = true })
屬性
textlock 啟用時不允許使用
參數
{data} 多行輸入。行會在 LF ("\n") 處換行。可以是二進位 (包含 NUL 位元組)。
{crlf} 也在 CR 和 CRLF 處換行。
{phase} -1:在單次呼叫中貼上 (也就是說,不進行串流處理)。要「串流」貼上,請使用這些 phase 值依序呼叫 nvim_paste
1:開始貼上 (恰好一次)
2:繼續貼上 (零次或多次)
3:結束貼上 (恰好一次)
傳回
true:客戶端可能會繼續貼上。
false:客戶端應該取消貼上。
nvim_put({lines}, {type}, {after}, {follow}) nvim_put()
在游標處放置文字,在任何模式下皆可。對於可點擊重複的輸入,請使用 nvim_paste()
比較 :putp,它們永遠是行式的。
屬性
textlock 啟用時不允許使用
參數
{lines} readfile() 樣式的行列表。channel-lines
{type} 編輯行為:任何 getregtype() 結果,或
"b" 區塊式可視模式 (可能包含寬度,例如 "b3")
"c" 字元式模式
"l" 行式模式
"" 根據內容猜測,請參閱 setreg()
{after} 如果為 true,則在游標後插入 (類似 p),否則在游標前插入 (類似 P)。
{follow} 如果為 true,則將游標放在插入文字的結尾。
nvim_replace_termcodes()
nvim_replace_termcodes({str}, {from_part}, {do_lt}, {special}) 將字串中的終端機程式碼和 鍵碼 (<CR><Esc>、...) 替換為內部表示法。
參數
{str} 要轉換的字串。
{from_part} 傳統 Vim 參數。通常為 true。
{do_lt} 也會翻譯 <lt>。如果 special 為 false,則忽略此值。
{special} 替換 鍵碼,例如 <CR> 會變成 "\r" 字元。
另請參閱
replace_termcodes
cpoptions
nvim_select_popupmenu_item()
nvim_select_popupmenu_item({item}, {insert}, {finish}, {opts}) 選取完成快顯功能表中的項目。
如果 ins-completioncmdline-completion 快顯功能表皆未啟用,此 API 呼叫會被靜默忽略。適用於使用 ui-popupmenu 的外部 UI 來使用滑鼠控制快顯功能表。也可以在對應中使用;請使用 <Cmd> :map-cmd 或 Lua 對應,以確保對應不會結束完成模式。
參數
{item} 要選取的項目索引(從零開始)。值 -1 表示不選取任何項目,並還原原始文字。
{insert} 對於 ins-completion,是否應該將選取項目插入到緩衝區中。cmdline-completion 會忽略此值。
{finish} 完成完成並關閉快顯功能表。暗示 {insert}
{opts} 可選參數。保留供日後使用。
nvim_set_client_info()
nvim_set_client_info({name}, {version}, {type}, {methods}, {attributes}) 自我識別客戶端。
客戶端/外掛程式/應用程式應該在連線後呼叫此函數,以提供有關其身分和用途的提示,以進行偵錯和協調。
可以呼叫多次;呼叫者應在適當時合併舊資訊。範例:程式庫首先識別通道,然後使用該程式庫的外掛程式稍後會識別自己。
注意
「有總比沒有好」。您不需要包含所有欄位。
屬性
RPC 限定
參數
{name} 已連線客戶端的簡短名稱
{version} 描述版本的字典,包含這些 (可選) 的鍵
"major" 主要版本 (如果未設定,則預設為 0,表示尚未發布)
"minor" 次要版本
"patch" 修補程式編號
"prerelease" 字串,描述預發行版本,例如 "dev" 或 "beta1"
"commit" commit 的雜湊值或類似的識別碼
{type} 必須是下列其中一個值。用戶端函式庫應預設為 "remote",除非使用者覆寫。
"remote" 遠端用戶端透過「Nvim 風格」的 MessagePack-RPC 連接(回應必須與請求順序相反)。msgpack-rpc
"msgpack-rpc" 遠端用戶端透過完全符合 MessagePack-RPC 的協定連接到 Nvim。
"ui" 圖形使用者介面前端
"embedder" 使用 Nvim 作為元件的應用程式(例如,實作 vim 模式的 IDE/編輯器)。
"host" 外掛程式主機,通常由 nvim 啟動
"plugin" 單一外掛程式,由 nvim 啟動
{methods} 用戶端的內建方法。對於主機,這不包含稍後才會探索到的外掛程式方法。鍵應為方法名稱,值為具有這些(可選)鍵的字典(Nvim 的未來版本可能會新增更多鍵,因此會忽略未知的鍵。用戶端只能使用在此版本或 Nvim 的後續版本中定義的鍵)
"async" 如果為 true,則以通知形式傳送。如果為 false 或未指定,則使用阻塞請求
"nargs" 參數數量。可以是單一整數或包含兩個整數的陣列,分別表示最小值和最大值(包含)。
{attributes} 非正式用戶端屬性的任意字串:字串對應。建議使用的鍵
"pid": 程序 ID。
"website": 用戶端首頁 URL(例如 GitHub 儲存庫)
"license": 授權描述("Apache 2"、"GPLv3"、"MIT"、...)
"logo": 影像的 URI 或路徑,最好是小型標誌或圖示。偏好使用 .png 或 .svg 格式。
nvim_set_current_buf({buffer}) nvim_set_current_buf()
設定目前的緩衝區。
屬性
textlock 為啟用狀態或在 cmdwin 中時不允許使用
參數
{buffer} 緩衝區控制代碼
nvim_set_current_dir({dir}) nvim_set_current_dir()
變更全域工作目錄。
參數
{dir} 目錄路徑
nvim_set_current_line({line}) nvim_set_current_line()
設定目前的行。
屬性
textlock 啟用時不允許使用
參數
{line} 行內容
nvim_set_current_tabpage({tabpage}) nvim_set_current_tabpage()
設定目前的索引標籤頁。
屬性
textlock 為啟用狀態或在 cmdwin 中時不允許使用
參數
{tabpage} 索引標籤頁控制代碼
nvim_set_current_win({window}) nvim_set_current_win()
設定目前的視窗。
屬性
textlock 為啟用狀態或在 cmdwin 中時不允許使用
參數
{window} 視窗控制代碼
nvim_set_hl({ns_id}, {name}, {val}) nvim_set_hl()
設定醒目提示群組。
注意
與可以更新醒目提示群組的 :highlight 命令不同,此函式會完全取代定義。例如:nvim_set_hl(0, 'Visual', {}) 將會清除 'Visual' 醒目提示群組。
fg 和 bg 鍵也接受字串值 "fg""bg",它們會做為 Normal 群組對應的前景和背景值的別名。如果尚未定義 Normal 群組,使用這些值將會導致錯誤。
如果將 link 與其他屬性結合使用;只有 link 會生效(請參閱 :hi-link)。
參數
{ns_id} 此醒目提示的命名空間 ID nvim_create_namespace()。使用 0 來全域設定醒目提示群組 :highlight。非全域命名空間的醒目提示預設為非作用中,使用 nvim_set_hl_ns()nvim_win_set_hl_ns() 來啟用它們。
{name} 醒目提示群組名稱,例如 "ErrorMsg"
{val} 醒目提示定義對應,接受下列鍵
fg:色彩名稱或 "#RRGGBB",請參閱附註。
bg:色彩名稱或 "#RRGGBB",請參閱附註。
sp:色彩名稱或 "#RRGGBB"
blend:介於 0 和 100 之間的整數
bold:布林值
standout:布林值
underline:布林值
undercurl:布林值
underdouble:布林值
underdotted:布林值
underdashed:布林值
strikethrough:布林值
italic:布林值
reverse:布林值
nocombine:布林值
link:要連結的其他醒目提示群組名稱,請參閱 :hi-link
default:不要覆寫現有的定義 :hi-default
ctermfg:設定 cterm 色彩的前景 ctermfg
ctermbg:設定 cterm 色彩的背景 ctermbg
cterm:cterm 屬性對應,例如 highlight-args。如果未設定,cterm 屬性將會符合上述文件中屬性對應的屬性。
force:如果為 true,則在醒目提示群組存在時強制更新。
nvim_set_hl_ns({ns_id}) nvim_set_hl_ns()
設定使用 nvim_set_hl() 定義的醒目提示的作用中命名空間。可以針對單一視窗進行設定,請參閱 nvim_win_set_hl_ns()
參數
{ns_id} 要使用的命名空間
nvim_set_hl_ns_fast({ns_id}) nvim_set_hl_ns_fast()
在重新繪製時,設定使用 nvim_set_hl() 定義的醒目提示的作用中命名空間。
此函式旨在重新繪製時呼叫,主要來自 nvim_set_decoration_provider() 的 on_win 和 on_line 回呼,這些回呼允許在重新繪製週期期間變更命名空間。
屬性
api-fast
參數
{ns_id} 要啟用的命名空間
nvim_set_keymap({mode}, {lhs}, {rhs}, {opts}) nvim_set_keymap()
針對指定的模式設定全域 對應
若要設定緩衝區本機對應,請使用 nvim_buf_set_keymap()
:map 不同,前導/尾隨空白會被接受為 {lhs}{rhs} 的一部分。空的 {rhs}<Nop>按鍵碼會照常取代。
範例
call nvim_set_keymap('n', ' <NL>', '', {'nowait': v:true})
相當於
nmap <nowait> <Space><NL> <Nop>
參數
{mode} 模式簡稱(對應命令字首:"n"、"i"、"v"、"x"、...)或 "!" 表示 :map!,或是空字串表示 :map。"ia"、"ca" 或 "!a" 分別表示在「插入」模式、「命令列」模式或兩者中縮寫
{lhs} 對應的左側 {lhs}
{rhs} 對應的右側 {rhs}
{opts} 選用參數對應:接受除 <buffer> 以外的所有 :map-arguments 作為鍵,值為布林值(預設為 false)。另外
"noremap" 停用 遞迴對應,類似 :noremap
"desc" 人類可讀取的描述。
"callback" Lua 函式,會呼叫來取代 {rhs}
"replace_keycodes" (布林值) 當 "expr" 為 true 時,取代結果字串中的按鍵碼(請參閱 nvim_replace_termcodes())。從 Lua "callback" 傳回 nil 相當於傳回空字串。
nvim_set_var({name}, {value}) nvim_set_var()
設定全域 (g:) 變數。
參數
{name} 變數名稱
{value} 變數值
nvim_set_vvar({name}, {value}) nvim_set_vvar()
設定 v: 變數(如果它不是唯讀)。
參數
{name} 變數名稱
{value} 變數值
nvim_strwidth({text}) nvim_strwidth()
計算 text 佔用的顯示儲存格數量。包括 <Tab> 在內的控制字元計為一個儲存格。
參數
{text} 某些文字
傳回
儲存格數量
nvim__complete_set({index}, {opts}) nvim__complete_set()
實驗性:此 API 將來可能會變更。
設定指定索引處完成項目的資訊。如果資訊文字顯示在視窗中,則傳回視窗和緩衝區 ID,如果未顯示,則傳回空字典。
參數
{index} 完成候選項索引
{opts} 可選參數。
info:(字串) 資訊文字。
傳回
包含下列鍵的字典
winid:(數字) 浮動視窗 ID
bufnr:(數字) 浮動視窗中的緩衝區 ID
nvim__get_runtime({pat}, {all}, {opts}) nvim__get_runtime()
在執行時間目錄中尋找檔案
屬性
api-fast
參數
{pat} 要搜尋的檔案模式
{all} 是否回傳所有符合的檔案,或者只回傳第一個
{opts} is_lua:僅搜尋 Lua 子目錄
傳回
找到的檔案的絕對路徑列表
nvim__id({obj}) nvim__id()
傳回做為引數提供的物件。
此 API 函式用於測試。不應依賴外掛程式中是否存在此函式。
參數
{obj} 要傳回的物件。
傳回
其引數。
nvim__id_array({arr}) nvim__id_array()
傳回做為引數提供的陣列。
此 API 函式用於測試。不應依賴外掛程式中是否存在此函式。
參數
{arr} 要傳回的陣列。
傳回
其引數。
nvim__id_dict({dct}) nvim__id_dict()
傳回做為引數提供的字典。
此 API 函式用於測試。不應依賴外掛程式中是否存在此函式。
參數
{dct} 要傳回的字典。
傳回
其引數。
nvim__id_float({flt}) nvim__id_float()
傳回做為引數提供的浮點值。
此 API 函式用於測試。不應依賴外掛程式中是否存在此函式。
參數
{flt} 要傳回的值。
傳回
其引數。
nvim__inspect_cell({grid}, {row}, {col}) nvim__inspect_cell()
注意:如果您的 UI 未使用 hlstate,則第一次不會傳回 hlstate。
nvim__invalidate_glyph_cache() nvim__invalidate_glyph_cache()
用於測試。schar_cache_clear_if_full 中的條件很難達到,因此可以使用此函式來強制在測試中清除快取。
nvim__redraw({opts}) nvim__redraw()
實驗性:此 API 將來可能會變更。
指示 Nvim 重新繪製各種元件。
參數
{opts} 可選參數。
win:如下所述,以特定 視窗 ID 作為目標。
buf:如下所述,以特定緩衝區編號作為目標。
flush:使用擱置的更新來更新螢幕。
valid:存在時,標示 winbuf 或所有視窗以進行重新繪製。當 true 時,僅重新繪製變更的行(適用於裝飾提供者)。當 false 時,強制重新繪製。
range:重新繪製 buf 中的範圍、win 中的緩衝區或目前緩衝區(適用於裝飾提供者)。預期為元組 [first, last],其中包含範圍的第一行和最後一行行號,以 0 為基礎的結束獨佔 api-indexing
cursor:立即更新螢幕上 win 或目前視窗中的游標位置。
statuscolumn:重新繪製 bufwin 或所有視窗中的 'statuscolumn'
statusline:重新繪製 bufwin 或所有視窗中的 'statusline'
winbar:重新繪製 bufwin 或所有視窗中的 'winbar'
tabline:重新繪製 'tabline'
另請參閱
nvim__stats() nvim__stats()
取得內部統計資料。
傳回
各種內部統計資料的對應。

Vimscript 函式 api-vimscript

nvim_call_dict_function()
nvim_call_dict_function({dict}, {fn}, {args}) 使用指定的引數呼叫 Vimscript 字典函式
發生執行錯誤時:會因 Vimscript 錯誤而失敗,並更新 v:errmsg。
參數
{dict} 字典,或評估為 Vimscript self 字典的字串
{fn} 在 Vimscript 字典中定義的函式名稱
{args} 以陣列封裝的函式引數
傳回
函式呼叫的結果
nvim_call_function({fn}, {args}) nvim_call_function()
使用指定的引數呼叫 Vimscript 函式。
發生執行錯誤時:會因 Vimscript 錯誤而失敗,並更新 v:errmsg。
參數
{fn} 要呼叫的函式
{args} 以陣列封裝的函式引數
傳回
函式呼叫的結果
nvim_command({command}) nvim_command()
執行 Ex 命令。
發生執行錯誤時:會因 Vimscript 錯誤而失敗,並更新 v:errmsg。
建議使用 nvim_cmd()nvim_exec2() 來取代此函數。若要直接評估多行 Vim 腳本或 Ex 命令,請使用 nvim_exec2()。若要使用結構化格式建立 Ex 命令並執行它,請使用 nvim_cmd()。若要在評估 Ex 命令之前修改它,請搭配使用 nvim_parse_cmd()nvim_cmd()
參數
{command} Ex 命令字串
nvim_eval({expr}) nvim_eval()
評估 Vimscript 運算式。字典和列表會以遞迴方式展開。
發生執行錯誤時:會因 Vimscript 錯誤而失敗,並更新 v:errmsg。
參數
{expr} Vimscript 運算式字串
傳回
評估結果或展開的物件
nvim_exec2({src}, {opts}) nvim_exec2()
執行 Vimscript(多行 Ex 命令區塊),類似於匿名 :source
nvim_command() 不同,此函數支援 heredoc、腳本範圍 (s:) 等。
發生執行錯誤時:會因 Vimscript 錯誤而失敗,並更新 v:errmsg。
參數
{src} Vimscript 程式碼
{opts} 可選參數。
output: (布林值,預設為 false) 是否捕獲並返回所有(非錯誤、非 shell :!)輸出。
傳回
包含執行資訊的字典,具有以下鍵:
output: (字串|nil) 如果 opts.output 為 true,則輸出。
nvim_parse_expression()
nvim_parse_expression({expr}, {flags}, {highlight}) 解析 Vimscript 運算式。
屬性
api-fast
參數
{expr} 要解析的運算式。一律視為單行。
{flags} 旗標
"m" 如果允許連續多個運算式(只會解析第一個),
"E" 如果不允許 EOC 符號(決定它們是否會停止解析過程或被識別為運算子/空格,儘管也會產生錯誤)。
"l" 當需要開始使用 ":let" 或 ":for" 的左值解析時。常見的旗標組合:
"m" 用於像 ":echo" 一樣解析。
"E" 用於像 "<C-r>=" 一樣解析。
空字串用於 ":call"。
"lm" 用於解析 ":let"。
{highlight} 如果為 true,傳回值也會包含 "highlight" 鍵,其中包含 4 個元素的元組(陣列)(整數、整數、整數、字串),前三個數字定義了高亮的區域,並表示行、起始欄和結束欄(後者不包含:應該高亮顯示區域 [起始欄,結束欄))。
傳回
AST:頂層字典,具有以下鍵:
"error":帶有錯誤的字典,僅當解析器看到錯誤時才會出現。包含以下鍵:
"message":字串,以 printf 格式的錯誤訊息,已翻譯。必須包含一個 "%.*s"。
"arg":字串,錯誤訊息引數。
"len":成功解析的位元組數量。當旗標等於 "" 時,該值應等於 expr 字串的長度。(「成功解析」在這裡的意思是「參與 AST 建立」,而不是「直到第一個錯誤」。)
"ast":AST,可以是 nil 或具有以下鍵的字典:
"type":節點類型,來自 ExprASTNodeType 字串化的值名稱之一,沒有 "kExprNode" 前綴。
"start":一對 [line, column],描述節點的「起始」位置,其中「line」始終為 0(如果要在例如 ":let" 上使用此 API,則不會為 0,但目前還沒有)。兩個元素都是整數。
"len":節點的「長度」。此值和 "start" 主要用於偵錯目的(偵錯解析器並提供偵錯資訊)。
"children":頂層的 /"ast" 中描述的節點列表。永遠有零個、一個或兩個子節點,如果節點沒有子節點,則鍵不存在。子節點的最大數量可以在 node_maxchildren 陣列中找到。
本機值(僅適用於某些節點):
"scope":單個整數,指定 "Option" 和 "PlainIdentifier" 節點的範圍。對於 "Option",它是 ExprOptScope 值之一,對於 "PlainIdentifier",它是 ExprVarScope 值之一。
"ident":識別碼(沒有範圍,如果有),存在於 "Option"、"PlainIdentifier"、"PlainKey" 和 "Environment" 節點中。
"name":整數,暫存器名稱(一個字元)或 -1。僅存在於 "Register" 節點中。
"cmp_type":字串,比較類型,來自 ExprComparisonType 的值名稱之一,字串化時沒有 "kExprCmp" 前綴。僅存在於 "Comparison" 節點中。
"ccs_strategy":字串,大小寫比較策略,來自 ExprCaseCompareStrategy 的值名稱之一,字串化時沒有 "kCCStrategy" 前綴。僅存在於 "Comparison" 節點中。
"augmentation":字串,"Assignment" 節點的擴增類型。對於 "="、"+="、"-=" 或 ".=",分別為空字串、"Add"、"Subtract" 或 "Concat"。
"invert":布林值,如果需要反轉比較結果,則為 true。僅存在於 "Comparison" 節點中。
"ivalue":整數,"Integer" 節點的整數值。
"fvalue":浮點數,"Float" 節點的浮點數值。
"svalue":字串,"SingleQuotedString" 和 "DoubleQuotedString" 節點的值。

命令函數 api-command

nvim_buf_create_user_command()
nvim_buf_create_user_command({buffer}, {name}, {command}, {opts}) 建立緩衝區本機命令 使用者命令
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區。
另請參閱
nvim_create_user_command
nvim_buf_del_user_command()
nvim_buf_del_user_command({buffer}, {name}) 刪除緩衝區本機使用者定義的命令。
只有使用 :command-buffernvim_buf_create_user_command() 建立的命令才能使用此函數刪除。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區。
{name} 要刪除的命令名稱。
nvim_buf_get_commands({buffer}, {opts}) nvim_buf_get_commands()
取得緩衝區本機 使用者命令 的映射。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{opts} 可選參數。目前未使用。
傳回
描述命令的映射的映射。
nvim_cmd({cmd}, {opts}) nvim_cmd()
執行 Ex 命令。
nvim_command() 不同,此命令採用結構化的字典而不是字串。這樣可以更輕鬆地建立和操作 Ex 命令。這也允許在命令引數內使用空格,在其他情況下不會展開檔案名稱的命令中展開檔案名稱等等。命令引數也可以是數字、布林值或字串。
第一個引數也可以用來取代支援它的命令的計數,以便更簡單地使用 vim.cmd()。例如,您可以執行 vim.cmd.bdelete(2),而不是 vim.cmd.bdelete{ count = 2 }
發生執行錯誤時:會因 Vimscript 錯誤而失敗,並更新 v:errmsg。
參數
{cmd} 要執行的命令。必須是字典,可以包含與 nvim_parse_cmd() 的傳回值相同的值,但 "addr"、"nargs" 和 "nextcmd" 除外,如果提供這些值,則會忽略。除了 "cmd" 之外的所有值都是可選的。
{opts} 可選參數。
output: (布林值,預設為 false) 是否傳回命令輸出。
傳回
如果 output 為 true,則傳回命令輸出(非錯誤、非 shell :!),否則傳回空字串。
nvim_create_user_command()
nvim_create_user_command({name}, {command}, {opts}) 建立全域 使用者命令 命令。
如需 Lua 用法,請參閱 lua-guide-commands-create
範例
:call nvim_create_user_command('SayHello', 'echo "Hello world!"', {'bang': v:true})
:SayHello
Hello world!
參數
{name} 新使用者命令的名稱。必須以大寫字母開頭。
{command} 執行此使用者命令時要執行的取代命令。當從 Lua 呼叫時,該命令也可以是 Lua 函數。呼叫該函數時會使用單個表格引數,其中包含以下鍵:
name: (字串) 命令名稱
args: (字串) 傳遞給命令的引數(如果有)<args>
fargs: (表格) 由未轉義的空格分割的引數(如果允許多個引數),如果有則為 <f-args>
nargs: (字串) 引數的數量 :command-nargs
bang: (布林值) 如果命令是以 ! 修飾符執行的,則為 "true" <bang>
line1: (數字) 命令範圍的起始行 <line1>
line2: (數字) 命令範圍的最終行 <line2>
range: (數字) 命令範圍中的項目數:0、1 或 2 <range>
count: (數字) 提供的任何計數 <count>
reg: (字串) 可選的暫存器,如果指定則為 <reg>
mods: (字串) 命令修飾符(如果有)<mods>
smods: (表格) 結構化格式的命令修飾符。具有與 nvim_parse_cmd() 的 "mods" 鍵相同的結構。
{opts} 可選的 命令屬性
將布林屬性(例如 :command-bang:command-bar)設定為 true(但不要設定 :command-buffer,請改用 nvim_buf_create_user_command())。
"complete" :command-complete 也接受 Lua 函數,其工作方式與 :command-completion-customlist 類似。
其他參數
desc: (字串) 當 {command} 使用 Lua 函數時,用於列出命令。
force: (布林值,預設為 true) 覆寫任何先前的定義。
preview: (函數) 'inccommand' 的預覽回呼 :command-preview
nvim_del_user_command({name}) nvim_del_user_command()
刪除使用者定義的命令。
參數
{name} 要刪除的命令名稱。
nvim_get_commands({opts}) nvim_get_commands()
取得全域(非緩衝區本機)Ex 命令的映射。
目前僅支援 使用者命令,不支援內建 Ex 命令。
參數
{opts} 可選參數。目前僅支援 {"builtin":false}
傳回
描述命令的映射的映射。
nvim_parse_cmd({str}, {opts}) nvim_parse_cmd()
解析命令列。
不檢查命令引數的有效性。
屬性
api-fast
參數
{str} 要解析的命令列字串。不能包含 "\n"。
{opts} 可選參數。保留供日後使用。
傳回
包含命令資訊的字典,具有以下鍵:
cmd: (字串) 命令名稱。
range: (陣列) (可選) 命令範圍 (<line1> <line2>)。如果命令不接受範圍,則省略。否則,如果未指定範圍,則沒有元素;如果只指定一個範圍項目,則有一個元素;如果指定了兩個範圍項目,則有兩個元素。
count: (數字) (選用) 命令 <count>。如果命令無法接受計數,則省略。
reg: (字串) (選用) 命令 <register>。如果命令無法接受暫存器,則省略。
bang: (布林值) 命令是否包含 <bang> (!) 修飾符。
args: (陣列) 命令參數。
addr: (字串) :command-addr 的值。針對 -addr=lines 使用簡短名稱或 "line"。
nargs: (字串) :command-nargs 的值。
nextcmd: (字串) 如果有多個命令以 :bar 分隔,則為下一個命令。如果沒有下一個命令,則為空。
magic: (字典) 哪些字元在命令參數中具有特殊意義。
file: (布林值) 命令會展開檔名。這表示會展開諸如 "%"、"#" 和萬用字元等字元。
bar: (布林值) "|" 字元被視為命令分隔符,而雙引號 (") 字元則被視為註解的開頭。
mods: (字典) :command-modifiers
filter: (字典) :filter
pattern: (字串) 過濾模式。如果沒有過濾器,則為空字串。
force: (布林值) 過濾器是否反轉。
silent: (布林值) :silent
emsg_silent: (布林值) :silent!
unsilent: (布林值) :unsilent
sandbox: (布林值) :sandbox
noautocmd: (布林值) :noautocmd
browse: (布林值) :browse
confirm: (布林值) :confirm
hide: (布林值) :hide
horizontal: (布林值) :horizontal
keepalt: (布林值) :keepalt
keepjumps: (布林值) :keepjumps
keepmarks: (布林值) :keepmarks
keeppatterns: (布林值) :keeppatterns
lockmarks: (布林值) :lockmarks
noswapfile: (布林值) :noswapfile
tab: (整數) :tab。省略時為 -1。
verbose: (整數) :verbose。省略時為 -1。
vertical: (布林值) :vertical
split: (字串) 分割修飾符字串,當沒有分割修飾符時,為空字串。如果存在分割修飾符,則可以是下列其中之一
"aboveleft": :aboveleft
"belowright": :belowright
"topleft": :topleft
"botright": :botright

選項函數 api-options

nvim_get_all_options_info() nvim_get_all_options_info()
取得所有選項的選項資訊。
字典將完整的選項名稱作為鍵,並將選項元數據字典作為 nvim_get_option_info2() 中詳述的內容。
傳回
所有選項的字典
另請參閱
nvim_get_option_info2({name}, {opts}) nvim_get_option_info2()
從任意緩衝區或視窗取得一個選項的選項資訊。
產生的字典具有以下鍵
name: 選項的名稱(例如 'filetype'
shortname: 選項的縮寫名稱(例如 'ft'
type: 選項的類型 ("string"、"number" 或 "boolean")
default: 選項的預設值
was_set: 是否設定了選項。
last_set_sid: 最後一次設定的腳本 ID(如果有的話)
last_set_linenr: 設定選項的行號
last_set_chan: 設定選項的通道(本機為 0)
scope: "global"、"win" 或 "buf" 之一
global_local: win 或 buf 選項是否具有全域值
commalist: 逗號分隔值的列表
flaglist: 單字元旗標的列表
當未提供 {scope} 時,最後一次設定的資訊會套用至目前緩衝區或視窗中的本機值(如果有的話),否則會傳回全域值資訊。可以藉由在 {opts} 表格中明確指定 {scope} 來停用此行為。
參數
{name} 選項名稱
{opts} 可選參數
scope: "global" 或 "local" 之一。分別類似於 :setglobal:setlocal
win: 視窗 ID。用於取得視窗本機選項。
buf: 緩衝區編號。用於取得緩衝區本機選項。暗示 {scope} 為 "local"。
傳回
選項資訊
nvim_get_option_value({name}, {opts}) nvim_get_option_value()
取得選項的值。此函數的行為與 :set 的行為一致:如果存在選項的本機值,則傳回該值;否則,傳回全域值。本機值始終對應於目前的緩衝區或視窗,除非在 {opts} 中設定了 "buf" 或 "win"。
參數
{name} 選項名稱
{opts} 可選參數
scope: "global" 或 "local" 之一。分別類似於 :setglobal:setlocal
win: 視窗 ID。用於取得視窗本機選項。
buf: 緩衝區編號。用於取得緩衝區本機選項。暗示 {scope} 為 "local"。
filetype: filetype。用於取得特定檔案類型的預設選項。不能與任何其他選項一起使用。注意:這將觸發對應檔案類型的 ftplugin 和所有 FileType 自動命令。
傳回
選項值
nvim_set_option_value()
nvim_set_option_value({name}, {value}, {opts}) 設定選項的值。此函數的行為與 :set 的行為一致:對於全域-本機選項,除非使用 {scope} 另行指定,否則會同時設定全域值和本機值。
請注意,選項 {win}{buf} 不能同時使用。
參數
{name} 選項名稱
{value} 新的選項值
{opts} 可選參數
scope: "global" 或 "local" 之一。分別類似於 :setglobal:setlocal
win: 視窗 ID。用於設定視窗本機選項。
buf: 緩衝區編號。用於設定緩衝區本機選項。

緩衝區函數 api-buffer

如需緩衝區的詳細資訊,請參閱 buffers
卸載的緩衝區
可以使用 :bunload 命令或緩衝區的 'bufhidden' 選項來卸載緩衝區。卸載緩衝區時,其檔案內容會從記憶體中釋放,而且 vim 在重新載入緩衝區之前(通常是在新視窗中再次開啟緩衝區)無法對緩衝區行進行操作。API 方法(例如 nvim_buf_get_lines()nvim_buf_line_count())將會受到影響。
您可以使用 nvim_buf_is_loaded()nvim_buf_line_count() 來檢查是否已載入緩衝區。
nvim_buf_attach({buffer}, {send_buffer}, {opts}) nvim_buf_attach()
在通道上啟動緩衝區更新事件,或作為 Lua 回呼。
範例 (Lua):在全域 events 變數中擷取緩衝區更新(使用 "vim.print(events)" 來查看其內容)
events = {}
vim.api.nvim_buf_attach(0, false, {
  on_lines = function(...)
    table.insert(events, {...})
  end,
})
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{send_buffer} 如果初始通知應包含整個緩衝區,則為 True:第一個通知將為 nvim_buf_lines_event。否則,第一個通知將為 nvim_buf_changedtick_event。不適用於 Lua 回呼。
{opts} 可選參數。
on_lines:在變更時叫用的 Lua 回呼。傳回真值(不是 falsenil)以分離。引數
字串 "lines"
緩衝區控制代碼
b:changedtick
第一個變更的行(以零為索引)
最後一個變更的行
更新範圍中的最後一行
先前內容的位元組計數
deleted_codepoints(如果 utf_sizes 為 true)
deleted_codeunits(如果 utf_sizes 為 true)
on_bytes:在變更時叫用的 Lua 回呼。與 on_lines 相比,此回呼接收有關變更的更精細資訊。傳回真值(不是 falsenil)以分離。引數
字串 "bytes"
緩衝區控制代碼
b:changedtick
已變更文字的起始列(以零為索引)
已變更文字的起始欄
已變更文字的位元組偏移量(從緩衝區的開頭算起)
已變更文字的舊結束列(從起始列偏移)
已變更文字的舊結束欄(如果舊結束列 = 0,則從起始欄偏移)
已變更文字的舊結束位元組長度
已變更文字的新結束列(從起始列偏移)
已變更文字的新結束欄(如果新結束列 = 0,則從起始欄偏移)
已變更文字的新結束位元組長度
on_changedtick:在 changedtick 遞增時叫用的 Lua 回呼,而無文字變更。引數
字串 "changedtick"
緩衝區控制代碼
b:changedtick
on_detach:在分離時叫用的 Lua 回呼。引數
字串 "detach"
緩衝區控制代碼
on_reload:在重新載入時叫用的 Lua 回呼。應將整個緩衝區內容視為已變更。引數
字串 "reload"
緩衝區控制代碼
utf_sizes:包含已取代區域的 UTF-32 和 UTF-16 大小,作為 on_lines 的引數。
preview:也附加到命令預覽(即 'inccommand')事件。
傳回
如果附加失敗(參數無效或未載入緩衝區),則為 False;否則為 True。TODO: LUA_API_NO_EVAL
nvim_buf_call({buffer}, {fun}) nvim_buf_call()
將函數呼叫與緩衝區作為臨時目前緩衝區。
這會暫時將目前的緩衝區切換到 "buffer"。如果目前的視窗已顯示 "buffer",則不會切換視窗。如果目前索引標籤頁面(包括浮動視窗)內的視窗已顯示緩衝區,則這些視窗之一將會暫時設定為目前視窗。否則,將使用臨時暫存視窗(基於歷史原因稱為「自動命令視窗」)。
這對於例如呼叫僅適用於目前緩衝區/視窗的 Vimscript 函數(例如 termopen())很有用。
屬性
僅限 Lua vim.api
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{fun} 要在緩衝區內呼叫的函數(目前僅限 Lua 可呼叫)
傳回
函數的傳回值。
nvim_buf_del_keymap({buffer}, {mode}, {lhs}) nvim_buf_del_keymap()
取消指定模式下,緩衝區本地的映射
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
另請參閱
nvim_buf_del_mark({buffer}, {name}) nvim_buf_del_mark()
刪除緩衝區中指定名稱的標記。請參閱mark-motions
注意
僅刪除在緩衝區中設定的標記,如果該標記未在緩衝區中設定,則會回傳 false。
參數
{buffer} 要設定標記的緩衝區
{name} 標記名稱
傳回
如果已刪除標記則為 true,否則為 false。
nvim_buf_del_var({buffer}, {name}) nvim_buf_del_var()
移除緩衝區範圍 (b:) 的變數
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{name} 變數名稱
nvim_buf_delete({buffer}, {opts}) nvim_buf_delete()
刪除緩衝區。請參閱:bwipeout
屬性
textlock 為啟用狀態或在 cmdwin 中時不允許使用
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{opts} 可選參數。索引鍵:
force: 強制刪除並忽略未儲存的變更。
unload: 僅卸載,不刪除。請參閱:bunload
nvim_buf_detach({buffer}) nvim_buf_detach()
停用通道上的緩衝區更新事件。
屬性
RPC 限定
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
傳回
如果分離失敗(因為緩衝區未載入)則為 False;否則為 True。
另請參閱
api-lua-detach 用於分離 Lua 回呼函式
nvim_buf_get_changedtick({buffer}) nvim_buf_get_changedtick()
取得緩衝區的變更計數
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
傳回
b:changedtick 值。
nvim_buf_get_keymap({buffer}, {mode}) nvim_buf_get_keymap()
取得緩衝區本地的映射定義列表。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{mode} 模式簡稱(「n」、「i」、「v」...)
傳回
描述映射的 maparg() 類字典陣列。「buffer」鍵保存相關聯的緩衝區句柄。
nvim_buf_get_lines()
nvim_buf_get_lines({buffer}, {start}, {end}, {strict_indexing}) 從緩衝區取得一行範圍。
索引以零為起始,並且結束索引不包含在內。負索引會被解釋為 length+1+index:-1 指的是超出結尾的索引。因此,要取得最後一個元素,請使用 start=-2 和 end=-1。
超出範圍的索引會被限制在最接近的有效值,除非設定了 strict_indexing
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{start} 第一行的索引
{end} 最後一行的索引(不包含在內)
{strict_indexing} 是否超出範圍應產生錯誤。
傳回
行陣列,如果緩衝區未載入,則為空陣列。
nvim_buf_get_mark({buffer}, {name}) nvim_buf_get_mark()
回傳一個 (row,col) 元組,表示具名標記的位置。「行尾」的欄位位置會以 v:maxcol(大數字)回傳。請參閱mark-motions
標記是從 (1,0) 開始編號的。api-indexing
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{name} 標記名稱
傳回
(row,col)元組,如果未設定標記,或是設定在另一個緩衝區中的大寫/檔案標記,則為(0,0)。
nvim_buf_get_name({buffer}) nvim_buf_get_name()
取得緩衝區的完整檔案名稱
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
傳回
緩衝區名稱
nvim_buf_get_offset({buffer}, {index}) nvim_buf_get_offset()
回傳行的位元組偏移量(以 0 為起始)。api-indexing
第 1 行(索引=0)的偏移量為 0。計算 UTF-8 位元組。EOL 為一個位元組。'fileformat''fileencoding' 會被忽略。最後一行之後的行索引會給出緩衝區的總位元組數。如果會寫入,則會計算最終的 EOL 位元組,請參閱 'eol'
line2byte() 不同,對於超出範圍的索引會拋出錯誤。對於未載入的緩衝區會回傳 -1。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{index} 行索引
傳回
整數位元組偏移量,若為未載入的緩衝區則為 -1。
nvim_buf_get_text()
nvim_buf_get_text({buffer}, {start_row}, {start_col}, {end_row}, {end_col}, {opts}) 從緩衝區取得一個範圍。
這與 nvim_buf_get_lines() 的不同之處在於,它允許僅檢索一行中的部分內容。
索引以零為起始。列索引會包含在內,而欄位索引則不包含在內。
當檢索整行時,請優先使用 nvim_buf_get_lines()
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{start_row} 第一行的索引
{start_col} 第一行上的起始欄位(位元組偏移量)
{end_row} 最後一行的索引(包含在內)
{end_col} 最後一行上的結束欄位(位元組偏移量),不包含在內
{opts} 可選參數。目前未使用。
傳回
行陣列,如果緩衝區未載入,則為空陣列。
nvim_buf_get_var({buffer}, {name}) nvim_buf_get_var()
取得緩衝區範圍 (b:) 的變數。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{name} 變數名稱
傳回
變數值
nvim_buf_is_loaded({buffer}) nvim_buf_is_loaded()
檢查緩衝區是否有效且已載入。有關未載入的緩衝區的更多資訊,請參閱api-buffer
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
傳回
如果緩衝區有效且已載入,則為 true,否則為 false。
nvim_buf_is_valid({buffer}) nvim_buf_is_valid()
檢查緩衝區是否有效。
注意
即使緩衝區有效,也可能已卸載。有關未載入的緩衝區的更多資訊,請參閱api-buffer
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
傳回
如果緩衝區有效,則為 true,否則為 false。
nvim_buf_line_count({buffer}) nvim_buf_line_count()
回傳指定緩衝區中的行數。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
傳回
行數,或未載入的緩衝區為 0。api-buffer
nvim_buf_set_keymap()
nvim_buf_set_keymap({buffer}, {mode}, {lhs}, {rhs}, {opts}) 為指定的模式設定緩衝區本地的映射
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
另請參閱
nvim_buf_set_lines()
nvim_buf_set_lines({buffer}, {start}, {end}, {strict_indexing}, {replacement}) 設定(替換)緩衝區中的一行範圍。
索引以零為起始,並且結束索引不包含在內。負索引會被解釋為 length+1+index:-1 指的是超出結尾的索引。因此,要變更或刪除最後一個元素,請使用 start=-2 和 end=-1。
若要在給定索引處插入行,請將 startend 設定為相同的索引。若要刪除一系列行,請將 replacement 設定為空陣列。
超出範圍的索引會被限制在最接近的有效值,除非設定了 strict_indexing
屬性
textlock 啟用時不允許使用
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{start} 第一行的索引
{end} 最後一行的索引(不包含在內)
{strict_indexing} 是否超出範圍應產生錯誤。
{replacement} 要用作替換的行陣列
另請參閱
nvim_buf_set_mark()
nvim_buf_set_mark({buffer}, {name}, {line}, {col}, {opts}) 在指定的緩衝區中設定一個具名標記,允許所有標記檔案/大寫、視覺、上次變更等。請參閱mark-motions
標記是從 (1,0) 開始編號的。api-indexing
注意
將行傳遞為 0 會刪除標記
參數
{buffer} 要設定標記的緩衝區
{name} 標記名稱
{line} 行號
{col} 欄/列號
{opts} 可選參數。保留供日後使用。
傳回
如果設定了標記,則為 true,否則為 false。
nvim_buf_set_name({buffer}, {name}) nvim_buf_set_name()
設定緩衝區的完整檔案名稱,如:file_f
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{name} 緩衝區名稱
nvim_buf_set_text()
nvim_buf_set_text({buffer}, {start_row}, {start_col}, {end_row}, {end_col}, {replacement}) 設定(替換)緩衝區中的一個範圍
當僅修改一行中的部分內容時,建議使用此方法,而不是 nvim_buf_set_lines(),因為擴展標記將保留在受影響行的非修改部分。
索引以零為起始。列索引會包含在內,而欄位索引則不包含在內。
若要在給定的 (row, column) 位置插入文字,請使用 start_row = end_row = rowstart_col = end_col = col。若要刪除範圍內的文字,請使用 replacement = {}
注意
若要新增或刪除整行,請優先使用 nvim_buf_set_lines()(以提高效能)。
若要在游標處插入(而不是替換)文字,請優先使用 nvim_paste()nvim_put()
屬性
textlock 啟用時不允許使用
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{start_row} 第一行的索引
{start_col} 第一行上的起始欄位(位元組偏移量)
{end_row} 最後一行的索引(包含在內)
{end_col} 最後一行上的結束欄位(位元組偏移量),不包含在內
{replacement} 要用作替換的行陣列
nvim_buf_set_var({buffer}, {name}, {value}) nvim_buf_set_var()
設定緩衝區範圍 (b:) 的變數
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{name} 變數名稱
{value} 變數值

擴展標記函式 api-extmark

nvim_buf_add_highlight()
nvim_buf_add_highlight({buffer}, {ns_id}, {hl_group}, {line}, {col_start}, {col_end}) 將醒目提示新增至緩衝區。
適用於將醒目提示動態產生到緩衝區的插件(例如語意醒目提示器或程式碼檢查器)。此函式將單個醒目提示新增至緩衝區。與 matchaddpos() 不同,醒目提示會遵循行號的變更(當行插入/刪除到醒目提示行上方時),就像符號和標記一樣。
命名空間用於批次刪除/更新一組醒目提示。若要建立命名空間,請使用 nvim_create_namespace(),它會回傳命名空間 ID。將其作為 ns_id 傳遞給此函式,以將醒目提示新增至命名空間。然後,可以使用單次呼叫 nvim_buf_clear_namespace() 清除同一命名空間中的所有醒目提示。如果醒目提示永遠不會被 API 呼叫刪除,請傳遞 ns_id = -1
作為速記,可以使用 ns_id = 0 來為醒目提示建立新的命名空間,然後會回傳配置的 ID。如果 hl_group 是空字串,則不會新增醒目提示,但仍會回傳新的 ns_id。為了保持向後相容性,因此支援這種做法,新程式碼應使用 nvim_create_namespace() 來建立新的空命名空間。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{ns_id} 要使用的命名空間,或對於未分組的醒目提示使用 -1
{hl_group} 要使用的醒目提示群組的名稱
{line} 要醒目提示的行(以零為起始)
{col_start} 要醒目提示的欄位範圍的開始(以位元組為起始)
{col_end} 要醒目提示的欄位範圍的結束(以位元組為起始),或使用 -1 醒目提示到行尾
傳回
使用的 ns_id
nvim_buf_clear_namespace()
nvim_buf_clear_namespace({buffer}, {ns_id}, {line_start}, {line_end}) 從區域清除命名空間物件(醒目提示、擴展標記、虛擬文字)。
行以 0 為起始。api-indexing 若要清除整個緩衝區中的命名空間,請指定 line_start=0 和 line_end=-1。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{ns_id} 要清除的命名空間,或使用 -1 清除所有命名空間。
{line_start} 要清除的行範圍的開始
{line_end} 要清除的行範圍的結束(不包含在內),或使用 -1 清除到緩衝區的結尾。
nvim_buf_del_extmark({buffer}, {ns_id}, {id}) nvim_buf_del_extmark()
移除擴展標記
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{ns_id} 來自 nvim_create_namespace() 的命名空間 ID
{id} 擴展標記 ID
傳回
如果找到擴展標記,則為 true,否則為 false
nvim_buf_get_extmark_by_id()
nvim_buf_get_extmark_by_id({buffer}, {ns_id}, {id}, {opts}) 取得擴展標記的位置(以 0 為起始)。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{ns_id} 來自 nvim_create_namespace() 的命名空間 ID
{id} 擴展標記 ID
{opts} 可選參數。索引鍵:
details: 是否包含詳細資訊字典
hl_name: 是否包含高亮群組名稱而非 ID,如果省略則為 true
傳回
若 extmark ID 不存在,則為以 0 為起始索引的 (row, col) 元組或空列表 ()
nvim_buf_get_extmarks()
nvim_buf_get_extmarks({buffer}, {ns_id}, {start}, {end}, {opts}) 從緩衝區位置 (包含,以 0 為起始索引的 api 索引) 所定義的 字元式 區域中,以「遍歷順序」取得 extmarks
區域可以給定為 (row,col) 元組,或有效的 extmark ID (其位置定義邊界)。0 和 -1 分別理解為 (0,0) 和 (-1,-1),因此以下是等效的
vim.api.nvim_buf_get_extmarks(0, my_ns, 0, -1, {})
vim.api.nvim_buf_get_extmarks(0, my_ns, {0,0}, {-1,-1}, {})
如果 end 小於 start,則遍歷會向後進行。(搭配 limit 使用很有用,可以取得給定位置之前的第一個標記。)
注意: 當使用 extmark 範圍 (具有 end_row/end_col 位置的標記) 時,overlap 選項可能很有用。否則,只會考慮 extmark 的起始位置。
注意: 透過 :sign 命令放置的舊版符號會以 extmark 的形式實作,並會顯示在這裡。其詳細資訊陣列將包含 sign_name 欄位。
範例
local api = vim.api
local pos = api.nvim_win_get_cursor(0)
local ns  = api.nvim_create_namespace('my-plugin')
-- Create new extmark at line 1, column 1.
local m1  = api.nvim_buf_set_extmark(0, ns, 0, 0, {})
-- Create new extmark at line 3, column 1.
local m2  = api.nvim_buf_set_extmark(0, ns, 2, 0, {})
-- Get extmarks only from line 3.
local ms  = api.nvim_buf_get_extmarks(0, ns, {2,0}, {2,0}, {})
-- Get all marks in this buffer + namespace.
local all = api.nvim_buf_get_extmarks(0, ns, 0, -1, {})
vim.print(ms)
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{ns_id} 來自 nvim_create_namespace() 的命名空間 ID,或 -1 代表所有命名空間
{start} 範圍的起點:以 0 為起始索引的 (row, col) 或有效的 extmark ID (其位置定義邊界)。api 索引
{end} 範圍的終點 (包含):以 0 為起始索引的 (row, col) 或有效的 extmark ID (其位置定義邊界)。api 索引
{opts} 可選參數。索引鍵:
limit: 要傳回的標記最大數量
details: 是否包含詳細資訊字典
hl_name: 是否包含高亮群組名稱而非 ID,如果省略則為 true
overlap: 也包含與範圍重疊的標記,即使它們的起始位置小於 start
type: 依類型篩選標記:"highlight"、"sign"、"virt_text" 和 "virt_lines"
傳回
以「遍歷順序」排列的 [extmark_id, row, col] 元組列表。
nvim_buf_set_extmark()
nvim_buf_set_extmark({buffer}, {ns_id}, {line}, {col}, {opts}) 建立或更新 extmark
預設情況下,當沒有傳入 ID 時,會建立新的 extmark,但也可以透過傳入先前未使用過的 ID 來建立新的標記,或透過傳入現有標記的 ID 來移動現有標記。呼叫者必須自行追蹤現有和未使用的 ID。(在 RPC 上很有用,可以避免等待傳回值。)
使用可選參數,可以使用此功能來高亮顯示一段文字,並將虛擬文字與標記關聯。
如果存在,由 end_colend_row 定義的位置應在起始位置之後,才能使 extmark 涵蓋範圍。較早的結束位置不是錯誤,但其行為就像一個空範圍 (沒有高亮顯示)。
參數
{buffer} 緩衝區控制代碼,或 0 表示目前緩衝區
{ns_id} 來自 nvim_create_namespace() 的命名空間 ID
{line} 放置標記的行,以 0 為起始索引。api 索引
{col} 放置標記的列,以 0 為起始索引。api 索引
{opts} 可選參數。
id : 要編輯的 extmark ID。
end_row : 標記的結束行,以 0 為起始索引且包含在內。
end_col : 標記的結束列,以 0 為起始索引且不包含在內。
hl_group : 用於高亮顯示此標記的高亮群組名稱。
hl_eol : 當為 true 時,對於涵蓋一行的 EOL 的多行高亮顯示,請繼續為螢幕行的其餘部分高亮顯示 (就像 diff 和 cursorline 高亮顯示一樣)。
virt_text : 要連結到此標記的虛擬文字。一個 [text, highlight] 元組的列表,每個元組代表具有指定高亮顯示的文字區塊。highlight 元素可以是單個高亮群組,或多個高亮群組的陣列,這些群組將會堆疊 (優先順序最高的是最後一個)。高亮群組可以以字串或整數的形式提供,後者可以使用 nvim_get_hl_id_by_name() 取得。
virt_text_pos : 虛擬文字的位置。可能的值
"eol": 在 eol 字元之後 (預設值)。
"overlay": 在指定列上顯示,而不移動底層文字。
"right_align": 在視窗中靠右對齊顯示。
"inline": 在指定列上顯示,並根據需要將緩衝區文字向右移動。
virt_text_win_col : 將虛擬文字置於固定視窗列 (從螢幕行的第一個文字列開始) 而非 "virt_text_pos"。
virt_text_hide : 當背景文字被選取或因使用 'nowrap''smoothscroll' 捲動而隱藏時,隱藏虛擬文字。目前僅影響 "overlay" 虛擬文字。
virt_text_repeat_linebreak : 在換行時重複虛擬文字。
hl_mode : 控制高亮顯示如何與文字的高亮顯示組合。目前僅影響 virt_text 高亮顯示,但可能會在稍後版本中影響 hl_group
"replace": 僅顯示 virt_text 顏色。這是預設值。
"combine": 與背景文字顏色組合。
"blend": 與背景文字顏色混合。不支援 "inline" virt_text。
virt_lines : 要在此標記旁邊新增的虛擬行。這應該是一個行的陣列,其中每一行依次是 [text, highlight] 元組的陣列。一般而言,緩衝區和視窗選項不會影響文字的顯示。特別是 'wrap''linebreak' 選項不會生效,因此額外螢幕行的數量將始終與陣列的大小相符。但是 'tabstop' 緩衝區選項仍然用於硬式定位點。預設情況下,行放置在包含標記的緩衝區行下方。
virt_lines_above: 將虛擬行放置在上方。
virt_lines_leftcol: 將 extmark 放置在視窗的最左列,繞過符號和數字列。
ephemeral : 用於 nvim_set_decoration_provider() 回呼。標記僅用於目前的重繪週期,且不會永久儲存在緩衝區中。
right_gravity : 布林值,表示當插入新文字時,extmark 將移動的方向 (true 代表向右,false 代表向左)。預設值為 true。
end_right_gravity : 布林值,表示當插入新文字時,extmark 結束位置 (如果存在) 將移動的方向 (true 代表向右,false 代表向左)。預設值為 false。
undo_restore : 如果刪除了標記周圍的文字,然後透過復原還原,則還原標記的確切位置。預設值為 true。
invalidate : 布林值,表示如果刪除了標記的整個範圍,是否隱藏 extmark。對於隱藏的標記,會將一個 "invalid" 鍵新增到 nvim_buf_get_extmarks() 及其系列函式的 "details" 陣列中。如果 "undo_restore" 為 false,則會改為刪除 extmark。
priority: 高亮群組、符號屬性或虛擬文字的優先順序值。對於虛擬文字,優先順序最高的項目會最後繪製。例如,treesitter 高亮顯示會使用值 100。
strict: 布林值,表示如果行或列值超過緩衝區的末尾或行尾,則不應放置 extmark。預設值為 true。
sign_text: 用於在符號列中顯示的長度為 1-2 的字串。
sign_hl_group: 用於高亮顯示符號列文字的高亮群組名稱。
number_hl_group: 用於高亮顯示數字列的高亮群組名稱。
line_hl_group: 用於高亮顯示整行的高亮群組名稱。
cursorline_hl_group: 當游標與標記位於同一行且啟用 'cursorline' 時,用於高亮顯示符號列文字的高亮群組名稱。
conceal: 應為空或單個字元的字串。啟用類似於 :syn-conceal 的隱藏功能。當提供字元時,會將其用作 :syn-cchar。"hl_group" 會用作 cchar 的高亮顯示 (如果已提供),否則預設為 hl-Conceal
spell: 布林值,表示應在此 extmark 內執行拼字檢查
ui_watched: 布林值,表示應由 UI 繪製標記。設定後,UI 將接收 win_extmark 事件。注意:標記由 virt_text 屬性定位。可以與 virt_text 一起使用。
url: 與此 extmark 關聯的 URL。在 TUI 中,會使用 OSC 8 控制序列來產生指向此 URL 的可點擊超連結。
傳回
已建立/更新的 extmark ID
nvim_create_namespace({name}) nvim_create_namespace()
建立新的命名空間或取得現有的命名空間。命名空間
命名空間用於緩衝區高亮顯示和虛擬文字,請參閱 nvim_buf_add_highlight()nvim_buf_set_extmark()
命名空間可以命名或匿名。如果 name 符合現有的命名空間,則會傳回相關聯的 ID。如果 name 是空字串,則會建立新的匿名命名空間。
參數
{name} 命名空間名稱或空字串
傳回
命名空間 ID
nvim_get_namespaces() nvim_get_namespaces()
取得現有的非匿名 命名空間
傳回
從名稱對應到命名空間 ID 的字典。
nvim_set_decoration_provider()
nvim_set_decoration_provider({ns_id}, {opts}) 設定或變更 命名空間的裝飾提供者
這是一個非常通用的介面,用於在重繪程式碼期間觸發 Lua 回呼。
預期的用法是為目前重繪的緩衝區設定 extmarks。可以呼叫 nvim_buf_set_extmark() 以在每個視窗或每行新增標記。使用 ephemeral 鍵僅將標記用於目前的螢幕重繪 (下一次重繪將再次呼叫回呼)。
注意: 此函式不應頻繁呼叫。相反地,可以使用回呼函數本身來節流不必要的回呼。on_start 回呼可以返回 false 來停用提供器,直到下一次重繪。同樣地,在 on_win 中返回 false 將會跳過該視窗的 on_line 呼叫(但 on_win 中設定的任何擴展標記仍將會被使用)。一個管理多個裝飾來源的外掛程式,理想情況下應該只設定一個提供器,並在內部合併這些來源。無論如何,您可以使用多個 ns_id 來處理回呼中設定/修改的擴展標記。
注意: 除了設定擴展標記以外的任何操作都被視為實驗性的。執行像是變更選項之類的操作並非明確禁止,但很可能會有意想不到的後果(例如 100% 的 CPU 消耗)。執行 vim.rpcnotify 應該是沒問題的,但目前 vim.rpcrequest 相當可疑。
注意: 不允許在 on_line 回呼中移除或更新擴展標記。
屬性
僅限 Lua vim.api
參數
{ns_id} 來自 nvim_create_namespace() 的命名空間 ID
{opts} 回呼的表格
on_start: 在每次螢幕重繪時首先呼叫
["start", tick]
on_buf: 為每個正在重繪的緩衝區呼叫(在視窗回呼之前)
["buf", bufnr, tick]
on_win: 在開始重繪特定視窗時呼叫。
["win", winid, bufnr, toprow, botrow]
on_line: 為每個正在重繪的緩衝區行呼叫。(與折疊行的互動可能會變更)
["line", winid, bufnr, row]
on_end: 在重繪週期結束時呼叫
["end", tick]
nvim__ns_get({ns_id}) nvim__ns_get()
實驗性:此 API 未來將會變更。
取得命名空間的屬性
參數
{ns_id} 命名空間
傳回
定義命名空間屬性的映射,請參閱 nvim__ns_set()
nvim__ns_set({ns_id}, {opts}) nvim__ns_set()
實驗性:此 API 未來將會變更。
設定命名空間的一些屬性
參數
{ns_id} 命名空間
{opts} 要設定的可選參數
wins:要限定範圍的視窗列表

視窗函式 api-window

nvim_win_call({window}, {fun}) nvim_win_call()
將視窗作為臨時的目前視窗呼叫函式。
屬性
僅限 Lua vim.api
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{fun} 在視窗內呼叫的函式(目前僅限 Lua 可呼叫)
傳回
函數的傳回值。
nvim_win_close({window}, {force}) nvim_win_close()
關閉視窗(如同 :close 使用 window-ID)。
屬性
textlock 啟用時不允許使用
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{force} 行為如同 :close!。可以關閉具有未寫入變更的緩衝區的最後一個視窗。即使未設定 'hidden',緩衝區也會變成隱藏。
nvim_win_del_var({window}, {name}) nvim_win_del_var()
移除視窗範圍(w:)的變數
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{name} 變數名稱
nvim_win_get_buf({window}) nvim_win_get_buf()
取得視窗中的目前緩衝區
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
緩衝區控制代碼
nvim_win_get_cursor({window}) nvim_win_get_cursor()
取得給定視窗的(1,0)索引、相對於緩衝區的游標位置(顯示相同緩衝區的不同視窗具有獨立的游標位置)。api-indexing
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
(列, 行) 元組
另請參閱
nvim_win_get_height({window}) nvim_win_get_height()
取得視窗高度
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
以列數計的高度
nvim_win_get_number({window}) nvim_win_get_number()
取得視窗編號
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
視窗編號
nvim_win_get_position({window}) nvim_win_get_position()
取得顯示單元格中的視窗位置。第一個位置為零。
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
具有視窗位置的 (列, 行) 元組
nvim_win_get_tabpage({window}) nvim_win_get_tabpage()
取得視窗的標籤頁
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
包含視窗的標籤頁
nvim_win_get_var({window}, {name}) nvim_win_get_var()
取得視窗範圍(w:)的變數
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{name} 變數名稱
傳回
變數值
nvim_win_get_width({window}) nvim_win_get_width()
取得視窗寬度
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
以欄數計的寬度
nvim_win_hide({window}) nvim_win_hide()
關閉視窗並隱藏其中包含的緩衝區(如同 :hide 使用 window-ID)。
如同 :hide,緩衝區會變成隱藏,除非另一個視窗正在編輯它,或者 'bufhidden'unloaddeletewipe,而不是 :closenvim_win_close(),這將會關閉緩衝區。
屬性
textlock 啟用時不允許使用
參數
{window} 視窗控制代碼,或 0 表示目前視窗
nvim_win_is_valid({window}) nvim_win_is_valid()
檢查視窗是否有效
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
如果視窗有效則為 true,否則為 false
nvim_win_set_buf({window}, {buffer}) nvim_win_set_buf()
設定視窗中的目前緩衝區,沒有副作用
屬性
textlock 啟用時不允許使用
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{buffer} 緩衝區控制代碼
nvim_win_set_cursor({window}, {pos}) nvim_win_set_cursor()
設定視窗中的 (1,0) 索引游標位置。api-indexing。即使視窗不是目前的視窗,也會捲動視窗。
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{pos} 代表新位置的 (列, 行) 元組
nvim_win_set_height({window}, {height}) nvim_win_set_height()
設定視窗高度。
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{height} 以列數計的高度
nvim_win_set_hl_ns({window}, {ns_id}) nvim_win_set_hl_ns()
設定視窗的醒目提示命名空間。這會使用 nvim_set_hl() 為此命名空間定義的醒目提示,但在遺失時會退回全域醒目提示 (ns=0)。
這會優先於 'winhighlight' 選項。
參數
{ns_id} 要使用的命名空間
nvim_win_set_var({window}, {name}, {value}) nvim_win_set_var()
設定視窗範圍(w:)的變數
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{name} 變數名稱
{value} 變數值
nvim_win_set_width({window}, {width}) nvim_win_set_width()
設定視窗寬度。只有在螢幕垂直分割時才會成功。
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{width} 以欄數計的寬度
nvim_win_text_height({window}, {opts}) nvim_win_text_height()
計算給定視窗中一段文字範圍所佔用的螢幕行數。適用於螢幕外的文字,並將折疊納入考量。
除非該行位於 "start_row" 且指定了 "start_vcol",否則該行上方的差異填充或虛擬行會計為該行的一部分。
當省略 "end_row" 時,最後一個緩衝區行下方的差異填充或虛擬行將會計入結果。
行索引與 nvim_buf_get_text() 類似。
參數
{window} 視窗控制代碼,或 0 表示目前視窗。
{opts} 可選參數
start_row: 起始行索引,包含 0 開始。省略時從最頂端開始。
end_row: 結束行索引,包含 0 開始。省略時在最底部結束。
start_vcol: "start_row" 上的起始虛擬欄索引,包含 0 開始,向下捨入為完整的螢幕行。省略時包含整行。
end_vcol: "end_row" 上的結束虛擬欄索引,不包含 0 開始,向上捨入為完整的螢幕行。省略時包含整行。
傳回
包含文字高度資訊的字典,具有以下鍵
all: 該範圍佔用的螢幕行總數。
fill: 其中差異填充或虛擬行的數量。
另請參閱
virtcol() 用於文字寬度。

視窗配置函式 api-win_config

nvim_open_win({buffer}, {enter}, {config}) nvim_open_win()
開啟新的分割視窗,如果指定了 relative,則開啟浮動視窗;如果指定了 external,則開啟外部視窗(由 UI 管理)。
浮動視窗是在分割佈局上方繪製的視窗,位於其他視窗中的某些錨點位置。可以使用 ui-multigrid 擴充功能在內部繪製或由外部 GUI 繪製浮動視窗。外部視窗僅支援使用多網格 GUI,並顯示為獨立的頂層視窗。
有關浮動視窗的一般概述,請參閱 api-floatwin
在開啟浮動視窗時,必須指定新視窗的 widthheight,但對於一般視窗是可選的。
如果省略了 relativeexternal,則會建立一般的「分割」視窗。win 屬性決定將分割哪個視窗。如果沒有提供 winwin == 0,則會在目前視窗旁邊建立一個視窗。如果提供 -1,則會建立頂層分割。verticalsplit 僅對一般視窗有效,並用於控制分割方向。對於 vertical,確切的方向由 'splitright''splitbelow' 決定。分割視窗不能具有 bufpos/`row`/`col`/`border`/`title`/`footer` 屬性。
使用 relative=editor 時,(row=0,col=0) 指的是螢幕網格的左上角,而 (row=Lines-1,col=Columns-1) 指的是右下角。允許使用小數值,但內建實作(由非多網格 UI 使用)將始終向下捨入到最接近的整數。
允許使用超出範圍的值,以及使浮動視窗無法放入主編輯器內部的配置。內建實作會截斷值,因此浮動視窗完全位於主螢幕網格內。外部 GUI 可以讓浮動視窗像工具提示一樣懸停在主視窗之外,但不應使用它來指定任意的 WM 螢幕位置。
範例 (Lua):相對於視窗的浮動視窗
vim.api.nvim_open_win(0, false,
  {relative='win', row=3, col=3, width=12, height=3})
範例 (Lua):緩衝區相對浮動視窗 (隨著緩衝區滾動而移動)
vim.api.nvim_open_win(0, false,
  {relative='win', width=12, height=3, bufpos={100,10}})
範例 (Lua):在目前視窗左側垂直分割
vim.api.nvim_open_win(0, false, {
  split = 'left',
  win = 0
})
屬性
textlock 啟用時不允許使用
參數
{buffer} 要顯示的緩衝區,或 0 表示目前緩衝區
{enter} 進入視窗 (使其成為目前視窗)
{config} 定義視窗配置的映射。鍵值如下:
relative:設定視窗佈局為「浮動」,放置在相對於下列位置的 (row,col) 座標:
「editor」 全域編輯器網格
「win」 由 win 欄位指定的視窗,或目前視窗。
「cursor」 目前視窗中的游標位置。
「mouse」 滑鼠位置
win: 視窗 ID 要分割的視窗,或建立浮動視窗時的相對視窗 (relative="win")。
anchor:決定浮動視窗的哪個角落放置在 (row,col)
「NW」 西北 (預設)
「NE」 東北
「SW」 西南
「SE」 東南
width:視窗寬度 (以字元單元為單位)。最小為 1。
height:視窗高度 (以字元單元為單位)。最小為 1。
bufpos:將浮動視窗放置在相對於緩衝區文字的位置 (僅當 relative="win" 時)。接受零索引的 [行, 列] 元組。如果給定 rowcol,則會相對於此位置套用,否則預設為
如果 anchor 為「NW」或「NE」,則 row=1col=0
如果 anchor 為「SW」或「SE」,則 row=0col=0 (因此像是在緩衝區文字附近的工具提示)。
row:以「螢幕單元高度」為單位的列位置,可以是小數。
col:以「螢幕單元寬度」為單位的欄位置,可以是小數。
focusable:啟用使用者動作 (wincmds、滑鼠事件) 的焦點。預設為 true。非可聚焦的視窗可以通過 nvim_set_current_win() 進入,或者,當 mouse 欄位設為 true 時,可以通過滑鼠事件進入。
mouse:指定此視窗如何與滑鼠事件互動。預設為 focusable 值。
如果為 false,則滑鼠事件會穿過此視窗。
如果為 true,則滑鼠事件會正常與此視窗互動。
external:GUI 應將視窗顯示為外部頂層視窗。目前不接受與此同時使用的其他定位配置。
zindex:堆疊順序。具有較高 zindex 的浮動視窗會覆蓋具有較低索引的浮動視窗。必須大於零。以下螢幕元素的 z-index 已硬編碼:
100:插入完成彈出選單
200:訊息回滾
250:命令列完成彈出選單 (當 wildoptions+=pum 時) 浮動視窗的預設值為 50。一般而言,建議使用低於 100 的值,除非有充分的理由要覆蓋內建元素。
style:(選用) 配置視窗的外觀。目前僅支援一個值:
「minimal」Nvim 將顯示許多 UI 選項停用的視窗。這在顯示不應編輯文字的暫時浮動視窗時很有用。停用 'number''relativenumber''cursorline''cursorcolumn''foldcolumn''spell''list' 選項。'signcolumn' 會變更為 auto,而 'colorcolumn' 會清除。'statuscolumn' 會變更為空白。通過將 'fillchars'eob 標誌設定為空格字元,並清除 'winhighlight' 中的 hl-EndOfBuffer 區域,可以隱藏緩衝區末端區域。
border:(選用) 視窗邊框的樣式。這可以是字串或陣列。字串值如下:
「none」:無邊框 (預設)。
「single」:單線方框。
「double」:雙線方框。
「rounded」:與「single」類似,但具有圓角 ("╭" 等)。
「solid」:增加單個空格字元的填補。
「shadow」:通過與背景混合產生陰影效果。
如果它是陣列,則長度應為八或八的任何除數。陣列將指定從左上角開始順時針方向構成邊框的八個字元。例如,可以將雙框樣式指定為
[ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ].
如果字元數少於八個,它們將會重複。因此,可以使用以下方式指定 ASCII 邊框:
[ "/", "-", \"\\\\\", "|" ],
或所有字元都相同:
[ "x" ].
可以使用空字串關閉特定邊框,例如:
[ "", "", "", ">", "", "", "", "<" ]
只會建立垂直邊框,而不會建立水平邊框。預設情況下,使用 FloatBorder 突出顯示,該突出顯示在未定義時連結到 WinSeparator。也可以按字元指定:
[ ["+", "MyCorner"], ["x", "MyBorder"] ].
title:視窗邊框中的 (選用) 標題,可以是字串或列表。列表應包含 [文字, 突出顯示] 元組。如果為字串,或元組缺少突出顯示,則預設突出顯示群組為 FloatTitle
title_pos:標題位置。必須與 title 選項一起設定。值可以是「left」、「center」或「right」之一。預設為 "left"
footer:視窗邊框中的 (選用) 頁腳,可以是字串或列表。列表應包含 [文字, 突出顯示] 元組。如果為字串,或元組缺少突出顯示,則預設突出顯示群組為 FloatFooter
footer_pos:頁腳位置。必須與 footer 選項一起設定。值可以是「left」、「center」或「right」之一。預設為 "left"
noautocmd:如果為 true,則在呼叫期間會封鎖所有自動命令。
fixed:如果當 anchor 為 NW 或 SW 時為 true,即使視窗會被截斷,浮動視窗也會保持固定。
hide:如果為 true,則會隱藏浮動視窗。
vertical:垂直分割 :vertical
split:分割方向:「left」、「right」、「above」、「below」。
傳回
視窗控制代碼,或錯誤時為 0
nvim_win_get_config({window}) nvim_win_get_config()
取得視窗配置。
傳回的值可以給定給 nvim_open_win()
relative 對於一般視窗為空。
參數
{window} 視窗控制代碼,或 0 表示目前視窗
傳回
定義視窗配置的映射,請參閱 nvim_open_win()
nvim_win_set_config({window}, {config}) nvim_win_set_config()
配置視窗佈局。不能用於將標籤頁中的最後一個視窗移動到另一個標籤頁。
重新配置視窗時,缺少的選項鍵將不會變更。必須一起重新配置 row/`col` 和 relative
參數
{window} 視窗控制代碼,或 0 表示目前視窗
{config} 定義視窗配置的映射,請參閱 nvim_open_win()
另請參閱

標籤頁函數 api-tabpage

nvim_tabpage_del_var({tabpage}, {name}) nvim_tabpage_del_var()
移除標籤頁範圍的 (t:) 變數
參數
{tabpage} 標籤頁控制代碼,或 0 表示目前標籤頁
{name} 變數名稱
nvim_tabpage_get_number({tabpage}) nvim_tabpage_get_number()
取得標籤頁編號
參數
{tabpage} 標籤頁控制代碼,或 0 表示目前標籤頁
傳回
標籤頁編號
nvim_tabpage_get_var({tabpage}, {name}) nvim_tabpage_get_var()
取得標籤頁範圍的 (t:) 變數
參數
{tabpage} 標籤頁控制代碼,或 0 表示目前標籤頁
{name} 變數名稱
傳回
變數值
nvim_tabpage_get_win({tabpage}) nvim_tabpage_get_win()
取得標籤頁中的目前視窗
參數
{tabpage} 標籤頁控制代碼,或 0 表示目前標籤頁
傳回
視窗控制代碼
nvim_tabpage_is_valid({tabpage}) nvim_tabpage_is_valid()
檢查標籤頁是否有效
參數
{tabpage} 標籤頁控制代碼,或 0 表示目前標籤頁
傳回
如果標籤頁有效,則為 true,否則為 false
nvim_tabpage_list_wins({tabpage}) nvim_tabpage_list_wins()
取得標籤頁中的視窗
參數
{tabpage} 標籤頁控制代碼,或 0 表示目前標籤頁
傳回
tabpage 中的視窗列表
nvim_tabpage_set_var()
nvim_tabpage_set_var({tabpage}, {name}, {value}) 設定標籤頁範圍的 (t:) 變數
參數
{tabpage} 標籤頁控制代碼,或 0 表示目前標籤頁
{name} 變數名稱
{value} 變數值
nvim_tabpage_set_win({tabpage}, {win}) nvim_tabpage_set_win()
設定標籤頁中的目前視窗
參數
{tabpage} 標籤頁控制代碼,或 0 表示目前標籤頁
{win} 視窗控制代碼,必須已屬於 {tabpage}

自動命令函數 api-autocmd

nvim_clear_autocmds({opts}) nvim_clear_autocmds()
清除由 {opts} 選取的所有自動命令。若要刪除自動命令,請參閱 nvim_del_autocmd()
參數
{opts} 參數
event:(字串|表格) 範例
event: "pat1"
event: { "pat1" }
event: { "pat1", "pat2", "pat3" }
pattern:(字串|表格)
完全符合的模式或多個模式。
例如,如果您的自動命令具有 *.py 作為該模式,則必須傳遞完全相同的 *.py 才能清除它。test.py 不會符合該模式。
預設為清除所有模式。
注意:無法與 {buffer} 一起使用
buffer:(bufnr)
僅清除 autocmd-buflocal 自動命令。
注意:無法與 {pattern} 一起使用
group:(字串|整數) 自動命令群組名稱或 ID。
注意:如果未傳遞,則只會刪除不在任何群組中的自動命令。
nvim_create_augroup({name}, {opts}) nvim_create_augroup()
建立或取得自動命令群組 autocmd-groups
若要取得現有群組 ID,請執行
local id = vim.api.nvim_create_augroup("MyGroup", {
    clear = false
})
參數
{name} 字串:群組的名稱
{opts} 字典參數
clear (布林值) 選用:預設為 true。如果群組已存在,則清除現有命令 autocmd-groups
傳回
已建立群組的整數 ID。
另請參閱
nvim_create_autocmd({event}, {opts}) nvim_create_autocmd()
建立由 callback (Lua 函數或 Vimscript 函數名稱字串) 或 command (Ex 命令字串) 定義的 自動命令事件處理常式。
使用 Lua 回呼的範例
vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, {
  pattern = {"*.c", "*.h"},
  callback = function(ev)
    print(string.format('event fired: %s', vim.inspect(ev)))
  end
})
使用 Ex 命令作為處理常式的範例
vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, {
  pattern = {"*.c", "*.h"},
  command = "echo 'Entering a C or C++ file'",
})
注意:pattern 不會自動展開 (與 :autocmd 不同),因此必須明確展開 "$HOME" 和 "~" 等名稱
pattern = vim.fn.expand("~") .. "/some/path/*.py"
參數
{event} (字串|陣列) 將觸發處理常式 (callbackcommand) 的事件。
{opts} 選項字典
group (字串|整數) 選填:自動指令群組的名稱或 ID,用以比對。
pattern (字串|陣列) 選填:要逐字比對的樣式,請參閱autocmd-pattern
buffer (整數) 選填:用於緩衝區本地自動指令的緩衝區編號,請參閱autocmd-buflocal。不能與 {pattern} 一起使用。
desc (字串) 選填:描述 (用於文件和疑難排解)。
callback (函式|字串) 選填:當事件觸發時呼叫的 Lua 函式 (如果是字串,則是 Vimscript 函式名稱)。Lua 回呼可以傳回真值 (非 falsenil) 來刪除自動指令。接收一個引數,一個包含以下鍵的表格:event-args
id: (數字) 自動指令 ID
event: (字串) 已觸發事件的名稱,請參閱autocmd-events
group: (數字|nil) 自動指令群組 ID (如果有的話)
match: (字串) <amatch> 的展開值
buf: (數字) <abuf> 的展開值
file: (字串) <afile> 的展開值
data: (任何) 從 nvim_exec_autocmds() 傳遞的任意資料 event-data
command (字串) 選填:在事件上執行的 Vim 命令。不能與 {callback} 一起使用
once (布林值) 選填:預設為 false。僅執行一次自動指令,請參閱autocmd-once
nested (布林值) 選填:預設為 false。執行巢狀自動指令,請參閱autocmd-nested
傳回
自動指令 ID (數字)
nvim_del_augroup_by_id({id}) nvim_del_augroup_by_id()
依 ID 刪除自動指令群組。
要取得群組 ID,可以使用 nvim_get_autocmds()
注意:行為與 :augroup-delete 不同。刪除群組時,此群組中包含的自動指令也會被刪除和清除。此群組將不再存在。
參數
{id} 整數 群組的 ID。
nvim_del_augroup_by_name({name}) nvim_del_augroup_by_name()
依名稱刪除自動指令群組。
注意:行為與 :augroup-delete 不同。刪除群組時,此群組中包含的自動指令也會被刪除和清除。此群組將不再存在。
參數
{name} 字串 群組的名稱。
另請參閱
nvim_del_autocmd({id}) nvim_del_autocmd()
依 ID 刪除自動指令。
參數
{id} 整數 由 nvim_create_autocmd() 傳回的自動指令 ID。
nvim_exec_autocmds({event}, {opts}) nvim_exec_autocmds()
執行所有與 {event} 相符且符合對應的 {opts} 的自動指令,請參閱 autocmd-execute
參數
{event} (字串|陣列) 要執行的事件或多個事件
{opts} 自動指令選項的字典
group (字串|整數) 選填:要比對的自動指令群組名稱或 ID。請參閱autocmd-groups
pattern (字串|陣列) 選填:預設為 "*"。請參閱autocmd-pattern。不能與 {buffer} 一起使用。
buffer (整數) 選填:緩衝區編號。請參閱autocmd-buflocal。不能與 {pattern} 一起使用。
modeline (布林值) 選填:預設為 true。在自動指令之後處理 modeline <nomodeline>
data (任何):要傳送至自動指令回呼的任意資料。詳細資訊請參閱 nvim_create_autocmd()
另請參閱
nvim_get_autocmds({opts}) nvim_get_autocmds()
取得所有與對應 {opts} 相符的自動指令。
以下範例將取得符合所有指定條件的自動指令
-- Matches all criteria
autocommands = vim.api.nvim_get_autocmds({
  group = "MyGroup",
  event = {"BufEnter", "BufWinEnter"},
  pattern = {"*.c", "*.h"}
})
-- All commands from one group
autocommands = vim.api.nvim_get_autocmds({
  group = "MyGroup",
})
注意:當提供多個樣式或事件時,它將尋找符合它們任何組合的所有自動指令。
參數
{opts} 字典,至少包含下列其中一項
group (字串|整數):要比對的自動指令群組名稱或 ID。
event (字串|陣列):要比對的事件或多個事件,請參閱autocmd-events
pattern (字串|陣列):要比對的樣式或多個樣式,請參閱autocmd-pattern。不能與 {buffer} 一起使用
buffer:緩衝區編號或用於緩衝區本地自動指令的緩衝區編號列表,請參閱autocmd-buflocal。不能與 {pattern} 一起使用
傳回
符合條件的自動指令陣列,其中每個項目包含以下欄位
id (數字):自動指令 ID (僅當使用 API 定義時)。
group (整數):自動指令群組 ID。
group_name (字串):自動指令群組名稱。
desc (字串):自動指令描述。
event (字串):自動指令事件。
command (字串):自動指令命令。注意:如果設定了回呼,則此值將為空。
callback (函式|字串|nil):Lua 函式或 Vim 腳本函式的名稱,當觸發此自動指令時執行。
once (布林值):自動指令是否只執行一次。
pattern (字串):自動指令樣式。如果自動指令是緩衝區本地的,請參閱autocmd-buffer-local
buflocal (布林值):如果自動指令是緩衝區本地的,則為 true。
buffer (數字):緩衝區編號。

UI 函式 api-ui

nvim_ui_attach({width}, {height}, {options}) nvim_ui_attach()
在通道上啟用 UI 事件。
所有 UI 用戶端的進入點。允許 --embed 繼續啟動。表示用戶端已準備好顯示 UI。將用戶端新增至 UI 列表。請參閱nvim_list_uis()
注意
如果附加了多個 UI 用戶端,則全域螢幕尺寸會降級為最小的用戶端。例如,如果用戶端 A 要求 80x40,但用戶端 B 要求 200x100,則全域螢幕大小為 80x40。
屬性
RPC 限定
參數
{width} 要求的螢幕欄數
{height} 要求的螢幕列數
{options} ui-option 對應
nvim_ui_detach() nvim_ui_detach()
停用通道上的 UI 事件。
從 UI 列表中移除用戶端。請參閱nvim_list_uis()
屬性
RPC 限定
nvim_ui_pum_set_bounds()
nvim_ui_pum_set_bounds({width}, {height}, {row}, {col}) 告知 Nvim 快顯選單的幾何形狀,以便將浮動視窗與外部快顯選單對齊。
請注意,此方法不應與 nvim_ui_pum_set_height() 混淆,後者設定快顯選單中可見項目的數量,而此函式設定快顯選單的邊界方塊,包括邊框和滑桿等視覺元素。浮動視窗不必使用相同的字型大小,也不必錨定到精確的格線角,因此可以將浮點數設定為快顯選單的幾何形狀。
屬性
RPC 限定
參數
{width} 快顯選單寬度。
{height} 快顯選單高度。
{row} 快顯選單列。
{col} 快顯選單高度。
nvim_ui_pum_set_height({height}) nvim_ui_pum_set_height()
告知 Nvim 快顯選單中顯示的元素數量,以決定 <PageUp><PageDown> 的移動。
屬性
RPC 限定
參數
{height} 快顯選單高度,必須大於零。
nvim_ui_set_focus({gained}) nvim_ui_set_focus()
告知 nvim 伺服器 GUI 是否取得或失去焦點
屬性
RPC 限定
nvim_ui_set_option({name}, {value}) nvim_ui_set_option()
屬性
RPC 限定
nvim_ui_term_event({event}, {value}) nvim_ui_term_event()
告知 Nvim 何時發生終端事件
支援以下終端事件
"termresponse":終端機已將 OSC 或 DCS 回應序列傳送至 Nvim。payload 是接收到的回應。設定 v:termresponse 並觸發 TermResponse
屬性
RPC 限定
參數
{event} 事件名稱
{value} 事件 payload
nvim_ui_try_resize({width}, {height}) nvim_ui_try_resize()
屬性
RPC 限定
nvim_ui_try_resize_grid()
nvim_ui_try_resize_grid({grid}, {width}, {height}) 告知 Nvim 調整格線大小。觸發一個 grid_resize 事件,其中包含要求的格線大小,或如果超過大小限制,則為最大大小。
如果格線控制代碼無效,則會失敗並出現錯誤。
屬性
RPC 限定
參數
{grid} 要變更的格線的控制代碼。
{width} 新的要求寬度。
{height} 新的要求高度。
主要
命令索引
快速參考