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 以了解打开通道的各种方式。打开通道的函数在 options 字典中包含一个 rpc 键。RPC 通道也可以通过其他进程连接到 Nvim 监听的 TCP/IP 套接字或命名管道来打开。
Nvim 在 启动 时创建一个默认的 RPC 套接字,由 v:servername 给出。要改为使用 TCP/IP 套接字启动,请使用 --listen 以及 TCP 样式的地址
nvim --listen 127.0.0.1:6666
可以使用 serverstart() 启动更多端点。
请注意,本地主机 TCP 套接字通常比命名管道安全性低,并且可能导致漏洞,例如远程代码执行。
连接到套接字是程序员测试 API 的最简单方法,这可以通过任何 msgpack-rpc 客户端库或功能齐全的 api-client 来完成。以下是一个在当前 Nvim 实例中打印“hello world!”的 Ruby 脚本
#!/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!"')
更好的方法是使用 Python REPL 以及“pynvim”包,这样就可以交互式地调用 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 标准类型的类型定义,而另一些则是 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())可能支持 Lua 函数参数以进行非 RPC 调用。
特殊类型(msgpack EXT)
这些是作为单独的对象子类型区分的整型类型定义。它们可以被视为不透明的整数,但它们之间不兼容:Buffer 可以作为整数传递,但不能作为 Window 或 Tabpage 传递。
EXT 对象数据是(整数)对象句柄。在 api-metadatatypes 键中给出的 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-option
{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_prerelease 等。 api-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}(端点独占,0 为基)之间的缓冲区文本更改为 {linedata} 列表中的新文本时。粒度是一行,即如果编辑器中的单个字符更改,则会发送整行。
{changedtick}v:null 时,这意味着屏幕行(显示)已更改,但缓冲区内容未更改。{linedata} 包含已更改的屏幕行。当 'inccommand' 显示缓冲区预览时,就会发生这种情况。
属性
{buf} API 缓冲区句柄(缓冲区编号)
{changedtick} 缓冲区的 b:changedtick 值。如果你向 nvim 发送 API 命令,则可以检查 b:changedtick 的值,作为请求的一部分,以确保没有进行其他更改。
{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 通知(例如,因为它太大)。
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 缓冲区句柄(缓冲区编号)
示例
在空缓冲区上调用 nvim_buf_attach(),其中 send_buffer=true,会发出
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} 后的最终换行符。如果在 nvim_buf_attach() 关键字参数中将 utf_sizes 设置为 true,则已删除区域的 UTF-32 和 UTF-16 大小也将作为附加参数 {old_utf32_size}{old_utf16_size} 传递。
"on_changedtick" 在 b: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

浮动窗口("floats")显示在普通窗口的顶部。这对于实现简单的部件很有用,例如显示在光标旁边的工具提示。floats 是完全功能的窗口,支持用户编辑、常见的 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' 通常可以用于在本地覆盖组。floats 继承当前窗口的选项;在 nvim_open_win() 中指定 style=minimal 以禁用各种视觉功能,例如 'number' 列。
特定于浮动窗口的其他突出显示组
hl-FloatBorder 用于窗口的边框
hl-FloatTitle 用于窗口的标题
hl-FloatFooter 用于窗口的页脚
目前,浮动窗口不支持某些部件,例如滚动条。
:mksession 的输出不包含用于恢复浮动窗口的命令。
示例:使用草稿缓冲区创建浮动窗口
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)
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>)
示例
让我们在第一行(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} 创建一个用于临时工作的 "一次性" 草稿缓冲区(始终为 '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,则添加到 消息历史记录
{opts} 可选参数。
verbose: 消息是在 'verbose' 选项的结果下打印的,如果 Nvim 是使用 -V3log_file 调用的,则消息将被重定向到 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: (布尔值) 评估 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 元数据 映射(字典)。
属性
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 实例的标准输入和标准输出
"stderr" 此 Nvim 实例的标准错误
"socket" TCP/IP 套接字或命名管道
"job" 通过其标准输入输出进行通信的作业。
"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”……)或“all”的空列表。
返回值
全局 上下文 的映射。
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(大数字)。参见 标记动作
标记是 (1,0) 索引的。api 索引
注意
小写名称(或其他缓冲区本地标记)是错误。
参数
{name} 标记名称
{opts} 可选参数。为将来使用而保留。
返回值
4 元组 (row, col, buffer, buffername),(0, 0, 0, '') 表示标记未设置。
nvim_get_mode() nvim_get_mode()
获取当前模式。mode() 的“blocking”为 true,表示 Nvim 正在等待输入。
属性
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()
在运行时目录中查找文件,按 '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()。伪键形式 <LeftMouse><col,row>api 等级 6 起已过时。
属性
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。默认情况下会在回显区域转发您的消息,但可以覆盖以触发桌面通知。
参数
{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" blockwise-visual 模式(可以包含宽度,例如 "b3")
"c" charwise 模式
"l" linewise 模式
"" 通过内容猜测,请参见 setreg()
{after} 如果为 true,则在光标之后插入(如 p),否则在光标之前插入(如 P)。
{follow} 如果为 true,则将光标放置在插入文本的末尾。
nvim_replace_termcodes()
nvim_replace_termcodes({str}, {from_part}, {do_lt}, {special}) 用内部表示替换字符串中的终端代码和 keycodes (<CR><Esc>、…)。
参数
{str} 要转换的字符串。
{from_part} 传统的 Vim 参数。通常为 true。
{do_lt} 也翻译 <lt>。如果 special 为 false,则忽略。
{special} 替换 keycodes,例如 <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" 提交的哈希值或类似标识符
{type} 必须是以下值之一。客户端库应默认为 "remote",除非用户覆盖。
"remote" 通过 "Nvim 风格" MessagePack-RPC 连接的远程客户端(响应必须按请求的相反顺序)。 msgpack-rpc
"msgpack-rpc" 通过完全符合 MessagePack-RPC 协议的协议连接到 Nvim 的远程客户端。
"ui" gui 前端
"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} 可选参数映射:接受所有 :map-arguments 作为键,但 <buffer> 除外,值是布尔值(默认值为 false)。此外
"noremap" 禁用 递归映射,类似于 :noremap
"desc" 人类可读的描述。
"callback" 代替 {rhs} 调用的 Lua 函数。
"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: 重绘 bufwin 中的缓冲区或当前缓冲区中的一个范围(对装饰提供者有用)。期望一个元组 [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() 不同,此函数支持 heredocs、脚本范围 (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 标记(确定它们是否将停止解析过程或被识别为运算符/空格,但也产生错误)。
当需要使用左值解析 ":let" 或 ":for" 时使用 "l"。常见标志集
使用 "m" 解析像 ":echo" 一样的表达式。
使用 "E" 解析像 "<C-r>=" 一样的表达式。
对于 ":call" 使用空字符串。
使用 "lm" 解析 ":let" 的表达式。
{highlight} 如果为真,返回值将包含 "highlight" 键,该键包含一个 4 元组 (数组) 的数组 (Integer, Integer, Integer, String),前三个数字定义高亮区域,分别代表行号、起始列号和结束列号 (后者不包括:应高亮区域 [start_col, end_col))。
返回值
AST:包含以下键的顶级字典
"error": 包含错误信息的字典,仅在解析器遇到错误时存在。包含以下键
"message": 字符串,错误消息以 printf 格式显示,已翻译。必须包含一个 "%.*s"。
"arg": 字符串,错误消息参数。
"len": 成功解析的字节数。当标志为空字符串时,该值应等于 expr 字符串的长度。("成功解析" 指的是 "参与了 AST 的创建",而不是 "直到第一个错误".)
"ast": AST,可以是 nil 或者包含以下键的字典
"type": 节点类型,从 ExprASTNodeType 中的某个值名称中去掉 "kExprNode" 前缀后的字符串。
"start": 一对 [line, column],描述节点 "开始" 的位置,其中 "line" 始终为 0 (如果您将此 API 用于例如 ":let" 时,它将不为 0,但这目前还没有实现)。两个元素都是整数。
"len": 节点的 "长度"。此项和 "start" 主要用于调试目的 (调试解析器并提供调试信息)。
"children": 一个节点列表,在顶级/"ast" 中描述。节点始终有 0、1 或 2 个子节点,如果节点没有子节点,则此键不会存在。子节点的最大数量可以在 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": 布尔值,如果比较结果需要反转,则为真。仅在 "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() 不同,此命令接受一个结构化的 Dict 而不是 String。这使得构建和操作 Ex 命令更加容易。这也允许例如在命令参数中包含空格、在不扩展文件名的命令中扩展文件名等等。命令参数也可以是 Number、Boolean 或 String。
第一个参数也可以用作计数,用于支持计数的命令,以便使用 vim.cmd() 简化其用法。例如,可以使用 vim.cmd.bdelete(2) 而不是 vim.cmd.bdelete{ count = 2 }
在执行错误时:以 Vimscript 错误失败,更新 v:errmsg。
参数
{cmd} 要执行的命令。必须是一个 Dict,它可以包含与 nvim_parse_cmd() 返回值相同的 value,除了 "addr"、"nargs" 和 "nextcmd",它们如果提供将被忽略。除 "cmd" 外的所有值都是可选的。
{opts} 可选参数。
output: (布尔值,默认为 false) 是否返回命令输出。
返回值
命令输出 (非错误、非 shell :!),如果 output 为 true,则为空字符串。
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: (字符串) 当使用 Lua 函数作为 {command} 时,用于列出命令。
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} 可选参数。为将来使用而保留。
返回值
包含命令信息的 Dict,具有以下键
cmd: (字符串) 命令名称。
range: (数组) (可选) 命令范围 (<line1> <line2>)。如果命令不接受范围,则省略。否则,如果未指定范围,则没有元素;如果只指定了单个范围项,则有一个元素;如果指定了两个范围项,则有两个元素。
count: (数字) (可选) 命令 <count>。如果命令不能接受计数,则省略。
reg: (字符串) (可选) 命令 <register>。如果命令不能接受寄存器,则省略。
bang: (布尔值) 命令是否包含 <bang> (!) 修饰符。
args: (数组) 命令参数。
addr: (字符串) :command-addr 的值。使用简短名称或 "line" 表示 -addr=lines。
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: 文件类型。用于获取特定文件类型的默认选项。不能与其他选项一起使用。 注意: 这将触发 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

有关缓冲区的更多信息,请参阅 缓冲区
未加载的缓冲区
缓冲区可以通过 :bunload 命令或缓冲区的 'bufhidden' 选项卸载。当缓冲区被卸载时,其文件内容将从内存中释放,vim 无法对缓冲区行进行操作,直到它被重新加载(通常是通过在新的窗口中再次打开缓冲区)。nvim_buf_get_lines()nvim_buf_line_count() 等 API 方法将受到影响。
可以使用 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
更改的第一行(从零开始索引)
更改的最后一行
更新范围中的最后一行
先前内容的字节数
已删除的码点(如果 utf_sizes 为真)
已删除的码元(如果 utf_sizes 为真)
on_bytes: 在更改时调用的 Lua 回调。与 on_lines 相比,此回调接收有关更改的更详细的信息。返回一个真值(不是 falsenil)以分离。参数
字符串 "bytes"
缓冲区句柄
b:changedtick
更改文本的起始行(从零开始索引)
更改文本的起始列
更改文本的字节偏移量(从缓冲区的开头算起)
更改文本的旧结束行(从起始行偏移)
更改文本的旧结束列(如果旧结束行为 0,则从起始列偏移)
更改文本的旧结束字节长度
更改文本的新结束行(从起始行偏移)
更改文本的新结束列(如果新结束行为 0,则从起始列偏移)
更改文本的新结束字节长度
on_changedtick: 在更改 tick 增量但没有文本更改时调用的 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",则不会切换窗口。如果当前标签页(包括浮动窗口)中的窗口已显示缓冲区,则其中一个窗口将暂时设置为当前窗口。否则,将使用一个临时的 scratch 窗口(出于历史原因称为 "autocmd 窗口")。
这在以下情况下很有用,例如调用仅对当前缓冲区/窗口起作用的 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()
删除缓冲区中的命名标记。请参阅 标记运动
注意
仅删除在缓冲区中设置的标记,如果标记未在缓冲区中设置,则返回 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()
获取缓冲区的更改 tick
参数
{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(大数字)返回。请参阅 标记运动
标记是 (1,0) 索引的。api 索引
参数
{buffer} 缓冲区句柄,或 0 表示当前缓冲区
{name} 标记名称
返回值
(row, col) 元组,(0, 0) 如果标记未设置,或是在另一个缓冲区中设置的 uppercase/file 标记。
nvim_buf_get_name({buffer}) nvim_buf_get_name()
获取缓冲区的完整文件名
参数
{buffer} 缓冲区句柄,或 0 表示当前缓冲区
返回值
缓冲区名称
nvim_buf_get_offset({buffer}, {index}) nvim_buf_get_offset()
返回行的字节偏移量(从零开始索引)。api-索引
第 1 行(index=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} 缓冲区句柄,或 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 索引
注意
将 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(),因为 extmarks 将保留在所触及行的未修改部分上。
索引从零开始。行索引包含末尾,列索引不包含末尾。
要在给定 (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} 变量值

Extmark 函数 api-extmark

nvim_buf_add_highlight()
nvim_buf_add_highlight({buffer}, {ns_id}, {hl_group}, {line}, {col_start}, {col_end}) 向缓冲区添加突出显示。
对于动态生成缓冲区突出显示的插件(如语义突出显示器或 linter)很有用。该函数向缓冲区添加单个突出显示。与 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}) 从区域中清除 命名空间 对象(突出显示、extmarks、虚拟文本)。
行从 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()
删除 extmark
参数
{buffer} 缓冲区句柄,或 0 表示当前缓冲区
{ns_id} 来自 nvim_create_namespace() 的命名空间 ID
{id} Extmark ID
返回值
如果找到了 extmark 则为 true,否则为 false
nvim_buf_get_extmark_by_id()
nvim_buf_get_extmark_by_id({buffer}, {ns_id}, {id}, {opts}) 获取 extmark 的位置(从零开始索引)。
参数
{buffer} 缓冲区句柄,或 0 表示当前缓冲区
{ns_id} 来自 nvim_create_namespace() 的命名空间 ID
{id} Extmark ID
{opts} 可选参数。键
details:是否包含 details 字典
hl_name:是否包含突出显示组名称而不是 ID,如果省略则为 true
返回值
0 索引 (row, col) 元组,或如果 extmark ID 不存在则为空列表 ()
nvim_buf_get_extmarks()
nvim_buf_get_extmarks({buffer}, {ns_id}, {start}, {end}, {opts}) 获取 extmarks,以“遍历顺序”从由缓冲区位置(包含,0 索引 api-indexing)定义的 字符级 区域。
区域可以作为 (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 命令放置的旧符号被实现为 extmarks,并将在此处显示。它们的 details 数组将包含一个 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} 可选参数。键
limit:要返回的最大标记数
details:是否包含 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 和未使用的 ID。(在 RPC 上很有用,以避免等待返回值。)
使用可选参数,可以使用此方法来突出显示文本范围,还可以将虚拟文本与标记相关联。
如果存在,end_colend_row 定义的位置应在起始位置之后,以使 extmark 覆盖范围。较早的结束位置不是错误,但它会像空范围一样(没有突出显示)。
参数
{buffer} 缓冲区句柄,或 0 表示当前缓冲区
{ns_id} 来自 nvim_create_namespace() 的命名空间 ID
{line} 放置标记的行,从 0 开始索引。 api-indexing
{col} 放置标记的列,从 0 开始索引。 api-indexing
{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。
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: 将 extmarks 放在窗口的最左侧列,绕过符号和数字列。
ephemeral : 用于 nvim_set_decoration_provider() 回调。该标记仅用于当前重绘周期,不会永久存储在缓冲区中。
right_gravity : 布尔值,指示在插入新文本时 extmark 将向哪个方向移动(true 为向右,false 为向左)。默认为 true。
end_right_gravity : 布尔值,指示在插入新文本时 extmark 结束位置(如果存在)将向哪个方向移动(true 为向右,false 为向左)。默认为 false。
undo_restore : 如果标记周围的文本被删除,然后通过撤销恢复,则恢复标记的精确位置。默认为 true。
invalidate : 布尔值,指示如果其整个范围被删除,是否隐藏 extmark。对于隐藏的标记,将向 nvim_buf_get_extmarks() 及其系列的 "details" 数组添加 "invalid" 键。如果 "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()
创建新的命名空间或获取现有命名空间。 namespace
命名空间用于缓冲区突出显示和虚拟文本,请参阅 nvim_buf_add_highlight()nvim_buf_set_extmark()
命名空间可以是命名或匿名的。如果 name 与现有命名空间匹配,则返回关联的 ID。如果 name 是空字符串,则会创建一个新的匿名命名空间。
参数
{name} 命名空间名称或空字符串。
返回值
命名空间 ID。
nvim_get_namespaces() nvim_get_namespaces()
获取现有的非匿名 namespaces。
返回值
将名称映射到命名空间 ID 的字典。
nvim_set_decoration_provider()
nvim_set_decoration_provider({ns_id}, {opts}) 设置或更改 namespace 的装饰提供程序。
这是一个非常通用的接口,用于在重绘代码期间触发 Lua 回调。
预期用法是为当前重绘的缓冲区设置 extmarks。可以使用 nvim_buf_set_extmark() 在每个窗口或每行基础上添加标记。使用 ephemeral 键仅对当前屏幕重绘使用标记(回调将在下一次重绘时再次被调用)。
注意:不应频繁调用此函数。相反,回调本身可用于限制不必要的回调。on_start 回调可以返回 false 以禁用提供程序,直到下一次重绘。类似地,在 on_win 中返回 false 将跳过该窗口的 on_line 调用(但任何在 on_win 中设置的 extmarks 仍将被使用)。管理多个装饰源的插件应该理想情况下只设置一个提供程序,并在内部合并源。无论如何,您可以使用多个 ns_id 来设置/修改回调内部的 extmarks。
注意:除了设置 extmarks 之外的任何操作都被认为是实验性的。更改选项之类的操作虽然没有明确禁止,但可能会产生意想不到的后果(例如 100% 的 CPU 占用率)。执行 vim.rpcnotify 应该没问题,但 vim.rpcrequest 目前还比较可疑。
注意:不允许在 on_line 回调中删除或更新 extmarks。
属性
仅限 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()
关闭窗口(类似于使用 :closewindow-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 表示当前窗口。
返回值
(row, col) 元组。
另请参阅
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 表示当前窗口。
返回值
(row, col) 元组,包含窗口位置。
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()
关闭窗口并隐藏它包含的缓冲区(类似于使用 :hidewindow-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} 代表新位置的 (row, col) 元组。
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() 用于文本宽度。

Win_config 函数 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: window-ID 要分割的窗口,或在创建浮动窗口时(relative="win")的相对窗口。
anchor: 决定浮动窗口的哪个角放置在 (row,col) 位置
"NW" 西北(默认)
"NE" 东北
"SW" 西南
"SE" 东南
width: 窗口宽度(以字符单元计)。最小值为 1。
height: 窗口高度(以字符单元计)。最小值为 1。
bufpos: 将浮动窗口相对于缓冲区文本放置(仅当 relative="win" 时)。接受一个零索引的 [line, column] 元组。如果给出了 rowcol,则它们相对于此位置应用,否则它们默认为
row=1col=0 如果 anchor 为 "NW" 或 "NE"
row=0col=0 如果 anchor 为 "SW" 或 "SE"(因此类似于缓冲区文本附近的工具提示)。
row: 以“屏幕单元高度”为单位的行位置,可以是小数。
col: 以“屏幕单元宽度”为单位的列位置,可以是小数。
focusable: 通过用户操作(wincmds、鼠标事件)启用焦点。默认为 true。非可聚焦窗口可以通过 nvim_set_current_win() 进入,或者,当 mouse 字段设置为 true 时,可以通过鼠标事件进入。
mouse: 指定此窗口如何与鼠标事件交互。默认为 focusable 值。
如果为 false,鼠标事件会穿过此窗口。
如果为 true,鼠标事件会正常与该窗口交互。
external: GUI 应将窗口显示为外部顶层窗口。目前不接受与之一起使用的其他定位配置。
zindex: 堆叠顺序。具有更高 zindex 的浮动窗口将位于具有较低索引的浮动窗口之上。必须大于零。以下屏幕元素具有硬编码的 z 索引
100: 插入完成弹出菜单
200: 消息回滚
250: 命令行完成弹出菜单(当 wildoptions+=pum 时)浮动窗口的默认值为 50。通常,建议使用低于 100 的值,除非有充分的理由覆盖内置元素。
style: (可选)配置窗口的外观。目前仅支持一个值
"minimal" Nvim 将显示一个禁用许多 UI 选项的窗口。这在显示临时浮动窗口时很有用,此时不应编辑文本。禁用 'number''relativenumber''cursorline''cursorcolumn''foldcolumn''spell''list' 选项。将 'signcolumn' 更改为 auto,并将 'colorcolumn' 清除。将 'statuscolumn' 更改为空。通过将 'fillchars'eob 标志设置为空格字符并将 hl-EndOfBuffer 区域从 'winhighlight' 中清除,隐藏缓冲区末尾区域。
border: (可选)窗口边框的样式。这可以是字符串或数组。字符串值是
"none": 无边框(默认)。
"single": 单行框。
"double": 双行框。
"rounded": 像 "single" 一样,但具有圆角("╭" 等)。
"solid": 通过单个空格单元添加填充。
"shadow": 通过与背景混合实现的阴影效果。
如果它是数组,则它应该具有八个或八个的任何因子的长度。数组将以顺时针方向指定构成边框的八个字符,从左上角开始。例如,双行框样式可以指定为
[ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ].
如果字符数量少于八个,它们将被重复。因此,ASCII 边框可以指定为
[ "/", "-", \"\\\\\", "|" ],
或所有字符都相同,如
[ "x" ].
可以使用空字符串关闭特定边框,例如,
[ "", "", "", ">", "", "", "", "<" ]
只会制作垂直边框,而不会制作水平边框。默认情况下,使用 FloatBorder 高亮显示,它在未定义时链接到 WinSeparator。它也可以通过字符指定
[ ["+", "MyCorner"], ["x", "MyBorder"] ].
title: 窗口边框中的标题(可选),字符串或列表。列表应包含 [text, highlight] 元组。如果为字符串,或元组缺少高亮显示,则默认高亮显示组为 FloatTitle
title_pos: 标题位置。必须与 title 选项一起设置。值可以是 "left"、"center" 或 "right" 之一。默认为 "left"
footer: 窗口边框中的页脚(可选),字符串或列表。列表应包含 [text, highlight] 元组。如果为字符串,或元组缺少高亮显示,则默认高亮显示组为 FloatFooter
footer_pos: 页脚位置。必须与 footer 选项一起设置。值可以是 "left"、"center" 或 "right" 之一。默认为 "left"
noautocmd: 如果为 true,则在调用期间阻止所有自动命令。
fixed: 如果为 true,当 anchor 为 NW 或 SW 时,即使窗口会被截断,浮动窗口也会保持固定。
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: (string|table) 示例
event: "pat1"
event: { "pat1" }
event: { "pat1", "pat2", "pat3" }
pattern: (string|table)
要精确匹配的模式或模式。
例如,如果您的自动命令具有 *.py 作为该模式,则必须精确传递 *.py 来清除它。test.py 不会匹配该模式。
默认为清除所有模式。
注意:不能与 {buffer} 一起使用
buffer: (bufnr)
仅清除 autocmd-buflocal 自动命令。
注意:不能与 {pattern} 一起使用
group: (string|int) augroup 名称或 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()
创建 autocommand 事件处理程序,由 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 (字符串|整数) 可选:要匹配的 autocommand 组名称或 ID。
pattern (字符串|数组) 可选:要匹配的模式 autocmd-pattern
buffer (整数) 可选:用于缓冲区局部 autocommands 的缓冲区编号 autocmd-buflocal。不能与 {pattern} 一起使用。
desc (字符串) 可选:描述(用于文档和故障排除)。
callback (函数|字符串) 可选:在触发事件时调用的 Lua 函数(或 Vimscript 函数名称,如果为字符串)。Lua 回调可以返回一个真值(不是 falsenil)以删除 autocommand。接收一个参数,一个包含以下键的表: event-args
id: (数字) autocommand ID
event: (字符串) 触发事件的名称 autocmd-events
group: (数字|无) autocommand 组 ID(如果有)
match: (字符串) <amatch> 的扩展值
buf: (数字) <abuf> 的扩展值
file: (字符串) <afile> 的扩展值
data: (任何) 来自 nvim_exec_autocmds() 的任意数据 event-data
command (字符串) 可选:在事件发生时执行的 Vim 命令。不能与 {callback} 一起使用。
once (布尔值) 可选:默认值为 false。仅运行一次 autocommand autocmd-once
nested (布尔值) 可选:默认值为 false。运行嵌套的 autocommands autocmd-nested
返回值
Autocommand ID (数字)
nvim_del_augroup_by_id({id}) nvim_del_augroup_by_id()
通过 ID 删除 autocommand 组。
要获取组 ID,可以使用 nvim_get_autocmds()
注意:行为与 :augroup-delete 不同。删除组时,该组中包含的 autocommands 也将被删除和清除。此组将不再存在。
参数
{id} 整数 组的 ID。
nvim_del_augroup_by_name({name}) nvim_del_augroup_by_name()
通过名称删除 autocommand 组。
注意:行为与 :augroup-delete 不同。删除组时,该组中包含的 autocommands 也将被删除和清除。此组将不再存在。
参数
{name} 字符串 组的名称。
另请参阅
nvim_del_autocmd({id}) nvim_del_autocmd()
通过 ID 删除 autocommand。
参数
{id} 整数 由 nvim_create_autocmd() 返回的 autocommand ID。
nvim_exec_autocmds({event}, {opts}) nvim_exec_autocmds()
执行所有与相应 {opts} 匹配的 {event} 的 autocommands autocmd-execute
参数
{event} (字符串|数组) 要执行的事件。
{opts} autocommand 选项的字典。
group (字符串|整数) 可选:要匹配的 autocommand 组名称或 ID。 autocmd-groups
pattern (字符串|数组) 可选:默认值为“*” autocmd-pattern。不能与 {buffer} 一起使用。
buffer (整数) 可选:缓冲区编号 autocmd-buflocal。不能与 {pattern} 一起使用。
modeline (布尔值) 可选:默认值为 true。在 autocommands <nomodeline> 后处理 modeline。
data (任何):要发送到 autocommand 回调的任意数据。有关详细信息,请参阅 nvim_create_autocmd()
另请参阅
nvim_get_autocmds({opts}) nvim_get_autocmds()
获取与相应 {opts} 匹配的所有 autocommands。
这些示例将获取与所有给定条件匹配的 autocommands。
-- 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",
})
注意:提供多个模式或事件时,它将找到与这些模式或事件的任何组合匹配的所有 autocommands。
参数
{opts} 包含以下至少一个内容的字典:
group (字符串|整数):要匹配的 autocommand 组名称或 ID。
event (字符串|数组):要匹配的事件 autocmd-events
pattern (字符串|数组):要匹配的模式 autocmd-pattern。不能与 {buffer} 一起使用。
buffer: 缓冲区编号或缓冲区局部 autocommands 的缓冲区编号列表 autocmd-buflocal。不能与 {pattern} 一起使用。
返回值
与条件匹配的 autocommands 数组,每个项目包含以下字段:
id (数字):autocommand ID(仅在使用 API 定义时)。
group (整数):autocommand 组 ID。
group_name (字符串):autocommand 组名称。
desc (字符串):autocommand 描述。
event (字符串):autocommand 事件。
command (字符串):autocommand 命令。 注意:如果设置了回调,则此项将为空。
callback (函数|字符串|无):在触发此 autocommand 时执行的 Lua 函数或 Vim 脚本函数的名称。
once (布尔值):autocommand 是否只运行一次。
pattern (字符串):autocommand 模式。如果 autocommand 是缓冲区局部 autocmd-buffer-local
buflocal (布尔值):如果 autocommand 是缓冲区局部,则为 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": 终端向 Nvim 发送了 OSC 或 DCS 响应序列。有效负载是接收到的响应。设置 v:termresponse 并触发 TermResponse
属性
RPC 仅限
参数
{event} 事件名称
{value} 事件有效负载
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} 新的请求高度。
命令索引
快速参考