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}
新的请求高度。