Nvim :help
頁面,由 產生,來源為 原始碼,使用 tree-sitter-vimdoc 解析器。
rpc
鍵。RPC 通道也可以由其他連線到 Nvim 監聽的 TCP/IP sockets 或具名管道的程序開啟。nvim --listen 127.0.0.1:6666可以使用 serverstart() 啟動更多端點。
#!/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!"')
>>> from pynvim import attach >>> nvim = attach('socket', path='[address]') >>> nvim.command('echo "hello world!"')
let nvim = jobstart(['nvim', '--embed'], {'rpc': v:true})
echo rpcrequest(nvim, 'nvim_eval', '"Hello " . "world!"')
call jobstop(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
types
鍵中給定的 EXT 型別代碼是穩定的:它們不會變更,因此是向前相容的。EXT Type C type Data ------------------------------------------------------------------------ Buffer enum value kObjectTypeBuffer |bufnr()| Window enum value kObjectTypeWindow |window-ID| Tabpage enum value kObjectTypeTabpage internal handle
(version.api_prerelease && fn.since == version.api_level)
{fn}
.since 函式 {fn}
被引入的 API 層級{fn}
.deprecated_since 函式 {fn}
被棄用的 API 層級functions
對應nvim_
以及型別名稱的前置詞,例如 nvim_buf_get_lines
是 Buffer 實例的 get_lines
方法。dev-apinvim_
作為前置詞,例如 nvim_list_bufs
。nvim --api-info | python -c 'import msgpack, sys, yaml; yaml.dump(msgpack.unpackb(sys.stdin.buffer.read()), sys.stdout)'
:lua vim.print(vim.fn.api_info())
:new|put =map(filter(api_info().functions, '!has_key(v:val,''deprecated_since'')'), 'v:val.name')
api_prerelease
等 api-metadata){type}
是由 api_info().error_types
定義的數值 ID,而 {message}
是包含錯誤訊息的字串。{buf}
, {changedtick}
, {firstline}
, {lastline}
, {linedata}
, {more}
]{firstline}
和 {lastline}
之間的緩衝區文字(不包含 {lastline}
,從零開始索引)被 {linedata}
列表中的新文字取代時。變更的粒度是以行為單位,也就是說,如果編輯器中只變更了一個字元,則會傳送整行。{changedtick}
為 v:null 時,表示螢幕上的行(顯示)已變更,但緩衝區內容沒有變更。{linedata}
包含已變更的螢幕行。當 'inccommand' 顯示緩衝區預覽時會發生這種情況。{buf}
API 緩衝區控制代碼(緩衝區編號){firstline}
被取代的第一行的整數行號。從零開始索引:如果第 1 行被取代,則 {firstline}
將為 0,而不是 1。{firstline}
始終小於或等於行被取代前緩衝區中的行數。{lastline}
未被取代的第一行的整數行號(即範圍 {firstline}
, {lastline}
不包含 {lastline}
)。從零開始索引:如果第 2 行到第 5 行被取代,則此值將為 5,而不是 6。{lastline}
始終小於或等於行被取代前緩衝區中的行數。如果事件是附加後的初始更新的一部分,則 {lastline}
將為 -1。{linedata}
字串列表,包含新緩衝區行的內容。省略了換行符號;空行以空字串傳送。{more}
布林值,對於「多部分」變更通知為 true:目前的變更已分成多個 nvim_buf_lines_event 通知(例如,因為它太大了)。{buf}
API 緩衝區控制代碼(緩衝區編號)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}]
{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_sizes
在 nvim_buf_attach() 關鍵字引數中設為 true,則刪除區域的 UTF-32 和 UTF-16 大小也會以額外引數 {old_utf32_size}
和 {old_utf16_size}
傳遞。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})
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)
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)
relative
選項是否為非空白if vim.api.nvim_win_get_config(window_id).relative ~= '' then
-- window with this window_id is floating
end
style=minimal
可以停用各種視覺功能,例如 'number' 欄。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})
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>)範例
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, {})
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]
{chan}
, {data}
) nvim_chan_send()id
。對於工作,它會將其寫入程序的 stdin。對於 stdio 通道 channel-stdio,它會寫入 Nvim 的 stdout。對於內部終端機執行個體 (nvim_open_term()),它會直接寫入終端機輸出。如需詳細資訊,請參閱 channel-bytes。{chan}
通道的 id{data}
要寫入的資料。8 位元清除:可以包含 NUL 位元組。{listed}
設定 'buflisted'{name}
標記名稱{name}
變數名稱{chunks}
一個 [text, hl_group]
陣列的列表,每個都代表一個帶有指定高亮的文字區塊。可以省略 hl_group
元素以表示沒有高亮。{history}
如果為 true,則新增至 message-history。{opts}
可選參數。{str}
訊息{str}
訊息{str}
狀態列字串(請參閱 'statusline')。{opts}
可選參數。{winid}
。與 {use_winbar}
互斥。{opts}
中的 "highlights" 鍵為 true 時才會包含。陣列的每個元素都是一個 字典,包含以下鍵return
:return my_function(...){code}
要執行的 Lua 程式碼{args}
程式碼的參數{keys}
, {mode}
, {escape_ks}
) nvim_feedkeys()mode
旗標控制的各種怪異行為影響。這是一個封鎖式呼叫,與 nvim_input() 不同。: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。[{channel-id}, {api-metadata}]
{chan}
channel_id,或 0 表示目前通道{name}
) nvim_get_color_by_name():echo nvim_get_color_by_name("Pink")
:echo nvim_get_color_by_name("#cbcbcb")
{name}
顏色名稱或 "#rrggbb" 字串link
屬性時,其他屬性將不會生效(請參閱 :hi-link)。{opts}
選項字典{opts}
可選參數{mode}
模式簡稱(「n」、「i」、「v」...){name}
, {opts}
) nvim_get_mark()(row, col, buffer, buffername)
元組,表示大寫/檔案命名的標記的位置。「行尾」的欄位置會傳回為 v:maxcol(很大的數字)。請參閱 mark-motions。{name}
標記名稱{opts}
可選參數。保留供日後使用。nvim_get_runtime_file("colors/*.{vim,lua}", true)
將會回傳所有顏色配置檔案。無論平台為何,在子目錄的搜尋模式中請總是使用正斜線 (/)。{name}
要搜尋的檔案模式{all}
是否回傳所有符合的檔案,或者只回傳第一個{name}
變數名稱{name}
變數名稱{keys}
) nvim_input(){keys}
要輸入的按鍵{button}
, {action}
, {modifier}
, {grid}
, {row}
, {col}
) 從 GUI 傳送滑鼠事件。<LeftMouse><col,row>
) 的 nvim_input() 也有相同的限制。{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}
滑鼠欄位置(從零開始,類似於重繪事件):ls!
。使用 nvim_buf_is_loaded() 來檢查緩衝區是否已載入。{dict}
Context 對應表。{msg}
要顯示給使用者的訊息{log_level}
日誌級別{opts}
保留以供未來使用。{buffer}
要使用的緩衝區(預期為空){opts}
可選參數。["input", term, bufnr, data]
{str}
訊息{data}
, {crlf}
, {phase}
) nvim_paste()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 })
{data}
多行輸入。行會在 LF ("\n") 處換行。可以是二進位 (包含 NUL 位元組)。{crlf}
也在 CR 和 CRLF 處換行。{phase}
-1:在單次呼叫中貼上 (也就是說,不進行串流處理)。要「串流」貼上,請使用這些 phase
值依序呼叫 nvim_paste
{lines}
, {type}
, {after}
, {follow}
) nvim_put(){type}
編輯行為:任何 getregtype() 結果,或{follow}
如果為 true,則將游標放在插入文字的結尾。{str}
, {from_part}
, {do_lt}
, {special}
) 將字串中的終端機程式碼和 鍵碼 (<CR>
、<Esc>
、...) 替換為內部表示法。{str}
要轉換的字串。{from_part}
傳統 Vim 參數。通常為 true。{do_lt}
也會翻譯 <lt>
。如果 special
為 false,則忽略此值。{item}
, {insert}
, {finish}
, {opts}
) 選取完成快顯功能表中的項目。<Cmd>
:map-cmd 或 Lua 對應,以確保對應不會結束完成模式。{item}
要選取的項目索引(從零開始)。值 -1 表示不選取任何項目,並還原原始文字。{finish}
完成完成並關閉快顯功能表。暗示 {insert}
。{opts}
可選參數。保留供日後使用。{name}
, {version}
, {type}
, {methods}
, {attributes}
) 自我識別客戶端。{name}
已連線客戶端的簡短名稱{version}
描述版本的字典,包含這些 (可選) 的鍵{type}
必須是下列其中一個值。用戶端函式庫應預設為 "remote",除非使用者覆寫。{methods}
用戶端的內建方法。對於主機,這不包含稍後才會探索到的外掛程式方法。鍵應為方法名稱,值為具有這些(可選)鍵的字典(Nvim 的未來版本可能會新增更多鍵,因此會忽略未知的鍵。用戶端只能使用在此版本或 Nvim 的後續版本中定義的鍵){attributes}
非正式用戶端屬性的任意字串:字串對應。建議使用的鍵{buffer}
緩衝區控制代碼{dir}
目錄路徑{line}
行內容{tabpage}
索引標籤頁控制代碼{window}
視窗控制代碼:highlight
命令不同,此函式會完全取代定義。例如:nvim_set_hl(0, 'Visual', {})
將會清除 'Visual' 醒目提示群組。"fg"
或 "bg"
,它們會做為 Normal 群組對應的前景和背景值的別名。如果尚未定義 Normal 群組,使用這些值將會導致錯誤。{ns_id}
此醒目提示的命名空間 ID nvim_create_namespace()。使用 0 來全域設定醒目提示群組 :highlight。非全域命名空間的醒目提示預設為非作用中,使用 nvim_set_hl_ns() 或 nvim_win_set_hl_ns() 來啟用它們。{name}
醒目提示群組名稱,例如 "ErrorMsg"{val}
醒目提示定義對應,接受下列鍵{ns_id}
) nvim_set_hl_ns(){ns_id}
要使用的命名空間{ns_id}
要啟用的命名空間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}。{rhs}
。{name}
變數名稱{value}
變數值{name}
變數名稱{value}
變數值{text}
某些文字{index}
完成候選項索引{opts}
可選參數。{pat}
要搜尋的檔案模式{all}
是否回傳所有符合的檔案,或者只回傳第一個{opts}
is_lua:僅搜尋 Lua 子目錄{obj}
要傳回的物件。{arr}
要傳回的陣列。{dct}
要傳回的字典。{flt}
要傳回的值。{grid}
, {row}
, {col}
) nvim__inspect_cell(){opts}
可選參數。win
、buf
或所有視窗以進行重新繪製。當 true
時,僅重新繪製變更的行(適用於裝飾提供者)。當 false
時,強制重新繪製。buf
中的範圍、win
中的緩衝區或目前緩衝區(適用於裝飾提供者)。預期為元組 [first, last]
,其中包含範圍的第一行和最後一行行號,以 0 為基礎的結束獨佔 api-indexing。win
或目前視窗中的游標位置。{fn}
要呼叫的函式{args}
以陣列封裝的函式引數{command}
Ex 命令字串{expr}
Vimscript 運算式字串opts.output
為 true,則輸出。{expr}
要解析的運算式。一律視為單行。{flags}
旗標":echo"
一樣解析。"<C-r>="
一樣解析。{highlight}
如果為 true,傳回值也會包含 "highlight" 鍵,其中包含 4 個元素的元組(陣列)(整數、整數、整數、字串),前三個數字定義了高亮的區域,並表示行、起始欄和結束欄(後者不包含:應該高亮顯示區域 [起始欄,結束欄))。[line, column]
,描述節點的「起始」位置,其中「line」始終為 0(如果要在例如 ":let" 上使用此 API,則不會為 0,但目前還沒有)。兩個元素都是整數。{buffer}
, {name}
, {command}
, {opts}
) 建立緩衝區本機命令 使用者命令。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區。{name}
要刪除的命令名稱。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{opts}
可選參數。目前未使用。vim.cmd.bdelete(2)
,而不是 vim.cmd.bdelete{ count = 2 }
。{cmd}
要執行的命令。必須是字典,可以包含與 nvim_parse_cmd() 的傳回值相同的值,但 "addr"、"nargs" 和 "nextcmd" 除外,如果提供這些值,則會忽略。除了 "cmd" 之外的所有值都是可選的。{opts}
可選參數。:call nvim_create_user_command('SayHello', 'echo "Hello world!"', {'bang': v:true})
:SayHello
Hello world!
{name}
新使用者命令的名稱。必須以大寫字母開頭。{command}
執行此使用者命令時要執行的取代命令。當從 Lua 呼叫時,該命令也可以是 Lua 函數。呼叫該函數時會使用單個表格引數,其中包含以下鍵:<args>
<f-args>
<bang>
<line1>
<line2>
<range>
<count>
<reg>
<mods>
{opts}
可選的 命令屬性。{command}
使用 Lua 函數時,用於列出命令。{name}
要刪除的命令名稱。{opts}
可選參數。目前僅支援 {"builtin":false}
{str}
要解析的命令列字串。不能包含 "\n"。{opts}
可選參數。保留供日後使用。<line1>
<line2>
)。如果命令不接受範圍,則省略。否則,如果未指定範圍,則沒有元素;如果只指定一個範圍項目,則有一個元素;如果指定了兩個範圍項目,則有兩個元素。<count>
。如果命令無法接受計數,則省略。<register>
。如果命令無法接受暫存器,則省略。<bang>
(!) 修飾符。{scope}
時,最後一次設定的資訊會套用至目前緩衝區或視窗中的本機值(如果有的話),否則會傳回全域值資訊。可以藉由在 {opts}
表格中明確指定 {scope}
來停用此行為。{name}
選項名稱{opts}
可選參數{scope}
為 "local"。{name}
, {opts}
) nvim_get_option_value(){opts}
中設定了 "buf" 或 "win"。{name}
選項名稱{opts}
可選參數{scope}
為 "local"。{name}
, {value}
, {opts}
) 設定選項的值。此函數的行為與 :set 的行為一致:對於全域-本機選項,除非使用 {scope}
另行指定,否則會同時設定全域值和本機值。{win}
和 {buf}
不能同時使用。{name}
選項名稱{value}
新的選項值{opts}
可選參數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}
可選參數。false
或 nil
)以分離。引數utf_sizes
為 true)utf_sizes
為 true)false
或 nil
)以分離。引數on_lines
的引數。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{fun}
要在緩衝區內呼叫的函數(目前僅限 Lua 可呼叫){buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{buffer}
要設定標記的緩衝區{name}
標記名稱{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{name}
變數名稱{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區b:changedtick
值。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{mode}
模式簡稱(「n」、「i」、「v」...)strict_indexing
。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{start}
第一行的索引{end}
最後一行的索引(不包含在內){strict_indexing}
是否超出範圍應產生錯誤。{buffer}
, {name}
) nvim_buf_get_mark()(row,col)
元組,表示具名標記的位置。「行尾」的欄位位置會以 v:maxcol(大數字)回傳。請參閱mark-motions。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{name}
標記名稱{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{index}
行索引{buffer}
, {start_row}
, {start_col}
, {end_row}
, {end_col}
, {opts}
) 從緩衝區取得一個範圍。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{start_row}
第一行的索引{start_col}
第一行上的起始欄位(位元組偏移量){end_row}
最後一行的索引(包含在內){end_col}
最後一行上的結束欄位(位元組偏移量),不包含在內{opts}
可選參數。目前未使用。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{name}
變數名稱{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{buffer}
, {start}
, {end}
, {strict_indexing}
, {replacement}
) 設定(替換)緩衝區中的一行範圍。start
和 end
設定為相同的索引。若要刪除一系列行,請將 replacement
設定為空陣列。strict_indexing
。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{start}
第一行的索引{end}
最後一行的索引(不包含在內){strict_indexing}
是否超出範圍應產生錯誤。{replacement}
要用作替換的行陣列{buffer}
, {name}
, {line}
, {col}
, {opts}
) 在指定的緩衝區中設定一個具名標記,允許所有標記檔案/大寫、視覺、上次變更等。請參閱mark-motions。{buffer}
要設定標記的緩衝區{name}
標記名稱{line}
行號{col}
欄/列號{opts}
可選參數。保留供日後使用。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{name}
緩衝區名稱{buffer}
, {start_row}
, {start_col}
, {end_row}
, {end_col}
, {replacement}
) 設定(替換)緩衝區中的一個範圍(row, column)
位置插入文字,請使用 start_row = end_row = row
和 start_col = end_col = col
。若要刪除範圍內的文字,請使用 replacement = {}
。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{start_row}
第一行的索引{start_col}
第一行上的起始欄位(位元組偏移量){end_row}
最後一行的索引(包含在內){end_col}
最後一行上的結束欄位(位元組偏移量),不包含在內{replacement}
要用作替換的行陣列{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{name}
變數名稱{value}
變數值{buffer}
, {ns_id}
, {hl_group}
, {line}
, {col_start}
, {col_end}
) 將醒目提示新增至緩衝區。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 醒目提示到行尾{buffer}
, {ns_id}
, {line_start}
, {line_end}
) 從區域清除命名空間物件(醒目提示、擴展標記、虛擬文字)。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{ns_id}
要清除的命名空間,或使用 -1 清除所有命名空間。{line_start}
要清除的行範圍的開始{line_end}
要清除的行範圍的結束(不包含在內),或使用 -1 清除到緩衝區的結尾。{buffer}
, {ns_id}
, {id}
, {opts}
) 取得擴展標記的位置(以 0 為起始)。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{ns_id}
來自 nvim_create_namespace() 的命名空間 ID{id}
擴展標記 ID{opts}
可選參數。索引鍵:{buffer}
, {ns_id}
, {start}
, {end}
, {opts}
) 從緩衝區位置 (包含,以 0 為起始索引的 api 索引) 所定義的 字元式 區域中,以「遍歷順序」取得 extmarks。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
使用很有用,可以取得給定位置之前的第一個標記。)overlap
選項可能很有用。否則,只會考慮 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}
可選參數。索引鍵:start
[extmark_id, row, col]
元組列表。end_col
和 end_row
定義的位置應在起始位置之後,才能使 extmark 涵蓋範圍。較早的結束位置不是錯誤,但其行為就像一個空範圍 (沒有高亮顯示)。{buffer}
緩衝區控制代碼,或 0 表示目前緩衝區{ns_id}
來自 nvim_create_namespace() 的命名空間 ID{line}
放置標記的行,以 0 為起始索引。api 索引{col}
放置標記的列,以 0 為起始索引。api 索引{opts}
可選參數。[text, highlight]
元組的列表,每個元組代表具有指定高亮顯示的文字區塊。highlight
元素可以是單個高亮群組,或多個高亮群組的陣列,這些群組將會堆疊 (優先順序最高的是最後一個)。高亮群組可以以字串或整數的形式提供,後者可以使用 nvim_get_hl_id_by_name() 取得。hl_group
。[text, highlight]
元組的陣列。一般而言,緩衝區和視窗選項不會影響文字的顯示。特別是 'wrap' 和 'linebreak' 選項不會生效,因此額外螢幕行的數量將始終與陣列的大小相符。但是 'tabstop' 緩衝區選項仍然用於硬式定位點。預設情況下,行放置在包含標記的緩衝區行下方。name
符合現有的命名空間,則會傳回相關聯的 ID。如果 name
是空字串,則會建立新的匿名命名空間。{name}
命名空間名稱或空字串ephemeral
鍵僅將標記用於目前的螢幕重繪 (下一次重繪將再次呼叫回呼)。on_start
回呼可以返回 false
來停用提供器,直到下一次重繪。同樣地,在 on_win
中返回 false
將會跳過該視窗的 on_line
呼叫(但 on_win
中設定的任何擴展標記仍將會被使用)。一個管理多個裝飾來源的外掛程式,理想情況下應該只設定一個提供器,並在內部合併這些來源。無論如何,您可以使用多個 ns_id
來處理回呼中設定/修改的擴展標記。vim.rpcnotify
應該是沒問題的,但目前 vim.rpcrequest
相當可疑。on_line
回呼中移除或更新擴展標記。["buf", bufnr, tick]
["win", winid, bufnr, toprow, botrow]
["line", winid, bufnr, row]
["end", tick]
{ns_id}
命名空間{ns_id}
命名空間{opts}
要設定的可選參數{window}
視窗控制代碼,或 0 表示目前視窗{fun}
在視窗內呼叫的函式(目前僅限 Lua 可呼叫){window}
視窗控制代碼,或 0 表示目前視窗{name}
變數名稱{window}
視窗控制代碼,或 0 表示目前視窗{window}
) nvim_win_get_cursor(){window}
視窗控制代碼,或 0 表示目前視窗{window}
視窗控制代碼,或 0 表示目前視窗{window}
視窗控制代碼,或 0 表示目前視窗{window}
視窗控制代碼,或 0 表示目前視窗{window}
視窗控制代碼,或 0 表示目前視窗{window}
視窗控制代碼,或 0 表示目前視窗{name}
變數名稱{window}
視窗控制代碼,或 0 表示目前視窗unload
、delete
或 wipe
,而不是 :close 或 nvim_win_close(),這將會關閉緩衝區。{window}
視窗控制代碼,或 0 表示目前視窗{window}
視窗控制代碼,或 0 表示目前視窗{window}
視窗控制代碼,或 0 表示目前視窗{buffer}
緩衝區控制代碼{window}
, {pos}
) nvim_win_set_cursor(){window}
視窗控制代碼,或 0 表示目前視窗{pos}
代表新位置的 (列, 行) 元組{window}
視窗控制代碼,或 0 表示目前視窗{height}
以列數計的高度{window}
, {ns_id}
) nvim_win_set_hl_ns(){ns_id}
要使用的命名空間{window}
視窗控制代碼,或 0 表示目前視窗{name}
變數名稱{value}
變數值{window}
視窗控制代碼,或 0 表示目前視窗{width}
以欄數計的寬度{window}
, {opts}
) nvim_win_text_height(){window}
視窗控制代碼,或 0 表示目前視窗。{opts}
可選參數{buffer}
, {enter}
, {config}
) nvim_open_win()relative
,則開啟浮動視窗;如果指定了 external
,則開啟外部視窗(由 UI 管理)。width
和 height
,但對於一般視窗是可選的。relative
和 external
,則會建立一般的「分割」視窗。win
屬性決定將分割哪個視窗。如果沒有提供 win
或 win == 0
,則會在目前視窗旁邊建立一個視窗。如果提供 -1,則會建立頂層分割。vertical
和 split
僅對一般視窗有效,並用於控制分割方向。對於 vertical
,確切的方向由 'splitright' 和 'splitbelow' 決定。分割視窗不能具有 bufpos
/`row`/`col`/`border`/`title`/`footer` 屬性。vim.api.nvim_open_win(0, false,
{relative='win', row=3, col=3, width=12, height=3})
vim.api.nvim_open_win(0, false,
{relative='win', width=12, height=3, bufpos={100,10}})
vim.api.nvim_open_win(0, false, {
split = 'left',
win = 0
})
{buffer}
要顯示的緩衝區,或 0 表示目前緩衝區{enter}
進入視窗 (使其成為目前視窗){config}
定義視窗配置的映射。鍵值如下:win
欄位指定的視窗,或目前視窗。[行, 列]
元組。如果給定 row
和 col
,則會相對於此位置套用,否則預設為anchor
為「NW」或「NE」,則 row=1
和 col=0
anchor
為「SW」或「SE」,則 row=0
和 col=0
(因此像是在緩衝區文字附近的工具提示)。mouse
欄位設為 true 時,可以通過滑鼠事件進入。focusable
值。zindex
的浮動視窗會覆蓋具有較低索引的浮動視窗。必須大於零。以下螢幕元素的 z-index 已硬編碼:auto
,而 'colorcolumn' 會清除。'statuscolumn' 會變更為空白。通過將 'fillchars' 的 eob
標誌設定為空格字元,並清除 'winhighlight' 中的 hl-EndOfBuffer 區域,可以隱藏緩衝區末端區域。[ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ].
[ "/", "-", \"\\\\\", "|" ],
[ "x" ].
[ "", "", "", ">", "", "", "", "<" ]
FloatBorder
突出顯示,該突出顯示在未定義時連結到 WinSeparator
。也可以按字元指定:[ ["+", "MyCorner"], ["x", "MyBorder"] ].
[文字, 突出顯示]
元組。如果為字串,或元組缺少突出顯示,則預設突出顯示群組為 FloatTitle
。title
選項一起設定。值可以是「left」、「center」或「right」之一。預設為 "left"
。[文字, 突出顯示]
元組。如果為字串,或元組缺少突出顯示,則預設突出顯示群組為 FloatFooter
。footer
選項一起設定。值可以是「left」、「center」或「right」之一。預設為 "left"
。relative
對於一般視窗為空。{window}
視窗控制代碼,或 0 表示目前視窗row
/`col` 和 relative
。{tabpage}
標籤頁控制代碼,或 0 表示目前標籤頁{name}
變數名稱{tabpage}
標籤頁控制代碼,或 0 表示目前標籤頁{tabpage}
標籤頁控制代碼,或 0 表示目前標籤頁{name}
變數名稱{tabpage}
標籤頁控制代碼,或 0 表示目前標籤頁{tabpage}
標籤頁控制代碼,或 0 表示目前標籤頁{tabpage}
標籤頁控制代碼,或 0 表示目前標籤頁tabpage
中的視窗列表{tabpage}
標籤頁控制代碼,或 0 表示目前標籤頁{name}
變數名稱{value}
變數值{tabpage}
標籤頁控制代碼,或 0 表示目前標籤頁{win}
視窗控制代碼,必須已屬於 {tabpage}
{opts}
) nvim_clear_autocmds(){opts}
選取的所有自動命令。若要刪除自動命令,請參閱 nvim_del_autocmd()。{opts}
參數*.py
作為該模式,則必須傳遞完全相同的 *.py
才能清除它。test.py
不會符合該模式。{buffer}
一起使用{pattern}
一起使用local id = vim.api.nvim_create_augroup("MyGroup", {
clear = false
})
{event}
, {opts}
) nvim_create_autocmd()callback
(Lua 函數或 Vimscript 函數名稱字串) 或 command
(Ex 命令字串) 定義的 自動命令事件處理常式。vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, {
pattern = {"*.c", "*.h"},
callback = function(ev)
print(string.format('event fired: %s', vim.inspect(ev)))
end
})
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}
(字串|陣列) 將觸發處理常式 (callback
或 command
) 的事件。{opts}
選項字典{pattern}
一起使用。false
或 nil
) 來刪除自動指令。接收一個引數,一個包含以下鍵的表格:event-args<amatch>
的展開值<abuf>
的展開值<afile>
的展開值{callback}
一起使用{id}
整數 群組的 ID。{name}
字串 群組的名稱。{id}
整數 由 nvim_create_autocmd() 傳回的自動指令 ID。{event}
, {opts}
) nvim_exec_autocmds(){event}
相符且符合對應的 {opts}
的自動指令,請參閱 autocmd-execute。{event}
(字串|陣列) 要執行的事件或多個事件{opts}
自動指令選項的字典{buffer}
一起使用。{pattern}
一起使用。<nomodeline>
。-- 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}
字典,至少包含下列其中一項{buffer}
一起使用{pattern}
一起使用{width}
, {height}
, {row}
, {col}
) 告知 Nvim 快顯選單的幾何形狀,以便將浮動視窗與外部快顯選單對齊。{width}
快顯選單寬度。{height}
快顯選單高度。{row}
快顯選單列。{col}
快顯選單高度。{height}
) nvim_ui_pum_set_height()<PageUp>
和 <PageDown>
的移動。{height}
快顯選單高度,必須大於零。{event}
事件名稱{value}
事件 payload{grid}
, {width}
, {height}
) 告知 Nvim 調整格線大小。觸發一個 grid_resize 事件,其中包含要求的格線大小,或如果超過大小限制,則為最大大小。{grid}
要變更的格線的控制代碼。{width}
新的要求寬度。{height}
新的要求高度。