Nvim 的 :help 页面,由 生成 自 源代码 使用 tree-sitter-vimdoc 解析器。
rpc 键。RPC 通道也可以通过其他进程连接到 Nvim 监听的 TCP/IP 套接字或命名管道来打开。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}(端点独占,0 为基)之间的缓冲区文本更改为 {linedata} 列表中的新文本时。粒度是一行,即如果编辑器中的单个字符更改,则会发送整行。{changedtick} 为 v:null 时,这意味着屏幕行(显示)已更改,但缓冲区内容未更改。{linedata} 包含已更改的屏幕行。当 'inccommand' 显示缓冲区预览时,就会发生这种情况。{buf} API 缓冲区句柄(缓冲区编号){firstline} 被替换的第一行的整数行号。0 为基:如果替换了第 1 行,则 {firstline} 将为 0,而不是 1。{firstline} 始终小于或等于替换行之前缓冲区中的行数。{lastline} 未被替换的第一行的整数行号(即,范围 {firstline}、{lastline} 是端点独占的)。0 为基:如果替换了行号 2 到 5,则这将是 5,而不是 6。{lastline} 始终小于或等于替换行之前缓冲区中的行数。如果事件是附加后的初始更新的一部分,则 {lastline} 将为 -1。{linedata} 包含新缓冲区行的字符串列表。省略换行符;空行以空字符串发送。{more} 布尔值,如果为 "multipart" 更改通知则为 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} 后的最终换行符。如果在 nvim_buf_attach() 关键字参数中将 utf_sizes 设置为 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)Extmarks 具有 "前向重力":如果您将光标直接放在 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,则添加到 消息历史记录。{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() 不同,这是一个阻塞调用。<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。[{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(大数字)。参见 标记动作。{name} 标记名称{opts} 可选参数。为将来使用而保留。nvim_get_runtime_file("colors/*.{vim,lua}", true) 将返回所有颜色方案文件。始终在搜索模式中使用正斜杠(/)表示子目录,无论平台如何。{name} 要搜索的文件模式{all} 是否返回所有匹配项或仅返回第一个匹配项{name} 变量名称{name} 变量名称{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{type} 编辑行为:任何 getregtype() 结果,或{follow} 如果为 true,则将光标放置在插入文本的末尾。{str}, {from_part}, {do_lt}, {special}) 用内部表示替换字符串中的终端代码和 keycodes (<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} 调用的 Lua 函数。{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} 如果为真,返回值将包含 "highlight" 键,该键包含一个 4 元组 (数组) 的数组 (Integer, Integer, Integer, String),前三个数字定义高亮区域,分别代表行号、起始列号和结束列号 (后者不包括:应高亮区域 [start_col, end_col))。[line, column],描述节点 "开始" 的位置,其中 "line" 始终为 0 (如果您将此 API 用于例如 ":let" 时,它将不为 0,但这目前还没有实现)。两个元素都是整数。{buffer}, {name}, {command}, {opts}) 创建一个缓冲区本地命令 用户命令.{buffer} 缓冲区句柄,或 0 表示当前缓冲区。{buffer} 缓冲区句柄,或 0 表示当前缓冲区。{name} 要删除的命令的名称。{buffer} 缓冲区句柄,或 0 表示当前缓冲区{opts} 可选参数。目前未用。vim.cmd.bdelete(2) 而不是 vim.cmd.bdelete{ count = 2 }。{cmd} 要执行的命令。必须是一个 Dict,它可以包含与 nvim_parse_cmd() 返回值相同的 value,除了 "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} 时,用于列出命令。{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 为真)utf_sizes 为真)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(大数字)返回。请参阅 标记运动。{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}) 从区域中清除 命名空间 对象(突出显示、extmarks、虚拟文本)。{buffer} 缓冲区句柄,或 0 表示当前缓冲区{ns_id} 要清除的命名空间,或 -1 用于清除所有命名空间。{line_start} 要清除的行范围的开始{line_end} 要清除的行范围的结束(独占)或 -1 用于清除到缓冲区末尾。{buffer}, {ns_id}, {id}, {opts}) 获取 extmark 的位置(从零开始索引)。{buffer} 缓冲区句柄,或 0 表示当前缓冲区{ns_id} 来自 nvim_create_namespace() 的命名空间 ID{id} Extmark ID{opts} 可选参数。键{buffer}, {ns_id}, {start}, {end}, {opts}) 获取 extmarks,以“遍历顺序”从由缓冲区位置(包含,0 索引 api-indexing)定义的 字符级 区域。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-indexing{end} 范围的结束(包含):0 索引的 (row, col) 或有效的 extmark ID(其位置定义边界)。 api-indexing{opts} 可选参数。键start[extmark_id, row, col] 元组列表。end_col 和 end_row 定义的位置应在起始位置之后,以使 extmark 覆盖范围。较早的结束位置不是错误,但它会像空范围一样(没有突出显示)。{buffer} 缓冲区句柄,或 0 表示当前缓冲区{ns_id} 来自 nvim_create_namespace() 的命名空间 ID{line} 放置标记的行,从 0 开始索引。 api-indexing{col} 放置标记的列,从 0 开始索引。 api-indexing{opts} 可选参数。[text, highlight] 元组列表,每个元组代表一个带有指定突出显示的文本块。highlight 元素可以是单个突出显示组,也可以是将被叠加的多个突出显示组的数组(最高优先级最后)。突出显示组可以作为字符串或整数提供,后者可以使用 nvim_get_hl_id_by_name() 获得。hl_group。[text, highlight] 元组的数组。通常,缓冲区和窗口选项不会影响文本的显示。特别是 'wrap' 和 'linebreak' 选项不生效,因此额外屏幕行的数量始终与数组的大小匹配。但是,'tabstop' 缓冲区选项仍然用于硬制表符。默认情况下,行放置在包含标记的缓冲区行的下方。name 与现有命名空间匹配,则返回关联的 ID。如果 name 是空字符串,则会创建一个新的匿名命名空间。{name} 命名空间名称或空字符串。{ns_id}, {opts}) 设置或更改 namespace 的装饰提供程序。ephemeral 键仅对当前屏幕重绘使用标记(回调将在下一次重绘时再次被调用)。on_start 回调可以返回 false 以禁用提供程序,直到下一次重绘。类似地,在 on_win 中返回 false 将跳过该窗口的 on_line 调用(但任何在 on_win 中设置的 extmarks 仍将被使用)。管理多个装饰源的插件应该理想情况下只设置一个提供程序,并在内部合并源。无论如何,您可以使用多个 ns_id 来设置/修改回调内部的 extmarks。vim.rpcnotify 应该没问题,但 vim.rpcrequest 目前还比较可疑。on_line 回调中删除或更新 extmarks。["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} 代表新位置的 (row, col) 元组。{window} 窗口句柄,或 0 表示当前窗口。{height} 高度以行数表示。{window}, {ns_id}) nvim_win_set_hl_ns(){ns_id} 要使用的命名空间{window} 窗口句柄,或 0 表示当前窗口。{name} 变量名称{value} 变量值{window} 窗口句柄,或 0 表示当前窗口。{width} 宽度以列数表示。{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 字段给出的窗口,或当前窗口。[line, column] 元组。如果给出了 row 和 col,则它们相对于此位置应用,否则它们默认为row=1 和 col=0 如果 anchor 为 "NW" 或 "NE"row=0 和 col=0 如果 anchor 为 "SW" 或 "SE"(因此类似于缓冲区文本附近的工具提示)。mouse 字段设置为 true 时,可以通过鼠标事件进入。focusable 值。zindex 的浮动窗口将位于具有较低索引的浮动窗口之上。必须大于零。以下屏幕元素具有硬编码的 z 索引auto,并将 'colorcolumn' 清除。将 'statuscolumn' 更改为空。通过将 'fillchars' 的 eob 标志设置为空格字符并将 hl-EndOfBuffer 区域从 'winhighlight' 中清除,隐藏缓冲区末尾区域。[ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ].
[ "/", "-", \"\\\\\", "|" ],
[ "x" ].
[ "", "", "", ">", "", "", "", "<" ]
FloatBorder 高亮显示,它在未定义时链接到 WinSeparator。它也可以通过字符指定[ ["+", "MyCorner"], ["x", "MyBorder"] ].
[text, highlight] 元组。如果为字符串,或元组缺少高亮显示,则默认高亮显示组为 FloatTitle。title 选项一起设置。值可以是 "left"、"center" 或 "right" 之一。默认为 "left"。[text, highlight] 元组。如果为字符串,或元组缺少高亮显示,则默认高亮显示组为 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)以删除 autocommand。接收一个参数,一个包含以下键的表: event-args<amatch> 的扩展值<abuf> 的扩展值<afile> 的扩展值{callback} 一起使用。{id} 整数 组的 ID。{name} 字符串 组的名称。{id} 整数 由 nvim_create_autocmd() 返回的 autocommand ID。{event}, {opts}) nvim_exec_autocmds(){opts} 匹配的 {event} 的 autocommands autocmd-execute。{event} (字符串|数组) 要执行的事件。{opts} autocommand 选项的字典。{buffer} 一起使用。{pattern} 一起使用。<nomodeline> 后处理 modeline。-- 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} 事件有效负载{grid}, {width}, {height}) 告知 Nvim 调整网格大小。触发带有请求的网格大小的 grid_resize 事件,或者如果它超过大小限制,则触发最大大小的事件。{grid} 要更改的网格的句柄。{width} 新的请求宽度。{height} 新的请求高度。