新闻

Nvim :help 页面,从 生成源代码 使用 tree-sitter-vimdoc 解析器。


自 Nvim 0.10 以来,值得注意的更改
有关先前版本中的更改,请参阅 news-0.10

HEAD 中的重大更改 news-breaking-dev

====== 发布前删除本节。 ======
以下对未发布功能的更改是在开发周期(Nvim HEAD,“master”分支)中进行的。

选项

'jumpoptions' 标志“unload”已重命名为“clean”。

重大更改 news-breaking

这些更改可能需要您在配置或插件中进行调整。

API

改进了 API“meta”文档字符串和 :help 文档。
vim.rpcnotify(0)rpcnotify(0) 向所有频道广播。以前它们只向订阅频道“多播”(由 nvim_subscribe() 控制)。想要“多播”行为的插件和客户端现在必须维护自己的频道列表。
将来,如果对这种用例有需求,vim.rpcnotify() 可能接受一个频道列表。
“Dictionary”在内部和 RPC api-metadata 中被重命名为“Dict”。这预计不会破坏客户端,因为没有已知的客户端实际上使用 return_type 字段或 --api-infonvim_get_api_info() 报告的参数类型名称。
nvim_open_win() 支持一个 mouse 字段,允许分别配置窗口与鼠标的交互,而不是 focusable 字段。
nvim__id_dictionary(不支持/实验性 API)重命名为 nvim__id_dict

默认值

]d-default[d-default 接受一个计数。
[D-default]D-default 分别跳转到当前缓冲区中第一个和最后一个诊断。

诊断

vim.diagnostic.config() 接受一个 “jump” 表,为 vim.diagnostic.jump() 指定默认值。
当使用 “severity_sort” 选项时,“underline” 诊断处理程序会按严重性对诊断进行排序。

编辑器

更改了放置符号的顺序。现在,优先级较高的符号将出现在优先级较低的符号的左侧。
hl-CurSearch 现在与 Vim 的行为相同,不再在每次光标移动时更新。
使用 :bnext 等命令在缓冲区列表中移动的行为与文档中所述相同,如果从非帮助缓冲区运行,则会跳过帮助缓冲区,否则会移动到另一个帮助缓冲区。
来自 终端 缓冲区的铃声现在默认情况下是静音的,除非 'belloff' 选项不包含 “term” 或 “all”。

事件

TODO

LSP

改进了 LSP 悬停文档的渲染。 K-lsp-default
vim.lsp.completion.enable() 获得了 convert 回调,它允许自定义将 LSP CompletionItem 转换为 complete-items 的转换。
vim.lsp.diagnostic.from() 可用于将 vim.Diagnostic 对象列表转换为其 LSP 诊断表示形式。
vim.lsp.buf.references()vim.lsp.buf.declaration()vim.lsp.buf.definition()vim.lsp.buf.type_definition()vim.lsp.buf.implementation()vim.lsp.buf.hover() 现在支持合并多个客户端的结果,但不再从 vim.lsp.handlers 触发全局处理程序。
vim.lsp.buf.typehierarchy() 现在为每个客户端请求传递正确的参数。
vim.lsp.diagnostic.on_publish_diagnostics()vim.lsp.diagnostic.on_diagnostic() 不再接受配置参数,也不再可以使用 vim.lsp.with() 进行配置。而是使用
vim.diagnostic.config(config, vim.lsp.diagnostic.get_namespace(client_id))

LUA

API 函数现在始终返回一个空字典,作为 vim.empty_dict()。早些时候,有时会使用 lua-special-tbl
用于以下命令行的补全:vim.gvim.tvim.wvim.bvim.vvim.ovim.wovim.bovim.optvim.opt_localvim.opt_globalvim.fn

选项

'statuscolumn' %l 项现在可以用作根据相关选项更改的数字列段。它负责对齐、'number''relativenumber''signcolumn' 设置为 “number”。现在已不再使用的 %r 项不再被 'statuscolumn' 特殊对待。
:set {option}< 删除了所有 全局-局部 选项的局部值,而不仅仅是字符串 全局-局部 选项。
:setlocal {option}< 将全局值复制到数字和布尔 全局-局部 选项的局部值,而不是删除局部值。

插件

TODO

TREESITTER

Query:iter_matches() 正确地返回匹配中所有匹配的节点,而不仅仅是最后一个节点。这意味着返回的表将捕获 ID 映射到需要对其进行迭代的节点列表。为了向后兼容,提供了 all=false 选项(只返回最后一个匹配的节点),该选项将在将来的版本中移除。
vim.treesitter.language.get_filetypes() 始终包含 {language} 参数,以及显式注册的文件类型。
vim.treesitter.language.get_lang() 如果没有显式注册任何语言,则回退到 {filetype} 参数。
vim.treesitter.language.add() 如果成功加载解析器,则返回 true,否则返回 nil,errmsg,而不是抛出错误。
新的 TSNode:child_with_descendant(),它与 TSNode:child_containing_descendant() 几乎完全相同,不同之处在于它可以返回后代本身。

TUI

TODO

VIMSCRIPT

v:msgpack_types 已删除类型 “binary”。msgpackparse() 不再将 BIN、STR 和 FIXSTR 视为单独的类型。如果可能,这些类型中的任何一个都将作为字符串返回,或者如果值包含嵌入的 NUL:s,则作为 blob 返回。

新功能 news-features

添加了以下新功能。

API

nvim__ns_set() 可以设置命名空间的属性

默认值

突出显示
改进了 :checkhealth 和 :help 缓冲区的样式。
映射
在普通模式下,grn 映射到 vim.lsp.buf.rename()
在普通模式下,grr 映射到 vim.lsp.buf.references()
在普通模式下,gri 映射到 vim.lsp.buf.implementation()
在普通模式下,gO 映射到 vim.lsp.buf.document_symbol()
在普通模式和可视模式下,gra 映射到 vim.lsp.buf.code_action()
在插入模式下,CTRL-S 映射到 vim.lsp.buf.signature_help()
当您右键单击 URL 时,鼠标 弹出菜单 包含一个“在网页浏览器中打开”项。
当缓冲区中处于活动状态时,鼠标 弹出菜单 包含一个“转到定义”项。
受 Tim Pope 的 vim-unimpaired 启发的映射
[q]q[Q]Q[CTRL-Q]CTRL-Q快速修复 列表中导航
[l]l[L]L[CTRL-L]CTRL-L位置列表 中导航
[t]t[T]T[CTRL-T]CTRL-T标记匹配列表 中导航
[a]a[A]A参数列表 中导航
[b]b[B]B缓冲区列表 中导航
片段
当片段处于活动状态且可向前跳转时,在插入模式和选择模式下,<Tab> 映射到 vim.snippet.jump({ direction = 1 })
当片段处于活动状态且可向后跳转时,在插入模式和选择模式下,<S-Tab> 映射到 vim.snippet.jump({ direction = -1 })

编辑器

改进了 粘贴 处理,用于重做(点重复)和宏(录制
重做大型粘贴速度明显更快,并且会忽略 'autoindent'
使用 @ 重播宏也会重播粘贴的文本。
在 Windows 上,命令行上以 “~” 或 “~/” 开头的文件名参数现在将扩展到用户的配置文件目录,而不是到字面 “~” 目录的相对路径。
hl-PmenuMatchhl-PmenuMatchSel 显示补全弹出窗口中的匹配文本。

事件

CompleteDone 现在在 v:event 中设置 reason 键,该键指定完成完成的原因。
vim.on_key() 回调可以通过返回空字符串来使用该键。

LSP

补全副作用(包括片段扩展、命令执行和附加文本编辑的应用)现在是内置的。
vim.lsp.util.locations_to_items() 设置 end_colend_lnum 字段。
vim.lsp.buf.format() 现在支持通过 range 参数传递范围列表(这需要支持 textDocument/rangesFormatting 请求)。
vim.lsp.buf.code_action() 操作在有多个客户端时显示客户端名称。

LUA

vim.fs.rm() 可以删除文件和目录。
vim.validate() 现在具有新的签名,它使用更少的表,性能更高且更易于阅读。
vim.str_byteindex()vim.str_utfindex() 获得了重载签名,支持两个新参数,encodingstrict_indexing

选项

'completeopt' 标志 “fuzzy” 在 ins-completion 期间启用 模糊匹配
'tabclose' 控制关闭选项卡页面时要聚焦哪个选项卡页面。

性能

TODO

插件

EditorConfig
现在支持 spelling_language 属性。

启动

如果 --listen$NVIM_LISTEN_ADDRESS 地址无效,Nvim 将会报错,而不是默默地跳过无效地址。

终端

终端 现在理解 OSC 52 转义序列以写入系统剪贴板(复制)。不支持使用 OSC 52 查询(粘贴)。
hl-StatusLineTermhl-StatusLineTermNC 定义了 终端 窗口中状态行的突出显示。
终端缓冲区现在支持重排(当缓冲区水平调整大小时,换行会自动调整)。注意:不可见且保存在 'scrollback' 中的行不会重排。
终端 现在支持 OSC 8 转义序列,并在支持的宿主终端中显示超链接。

TREESITTER

LanguageTree:node_for_range() 获取匿名和命名节点,用于指定范围。
vim.treesitter.get_node() 现在接受一个选项 include_anonymous,默认值为 false,这使得它能够返回匿名节点以及命名节点。

TUI

内置 UI 在其通道上声明 info nvim_set_client_info()。请参阅 startup-tui。若要查看当前 UI 信息,请尝试以下操作
:lua =vim.api.nvim_get_chan_info(vim.api.nvim_list_uis()[1].chan)
由内置 UI 客户端(TUI,--remote-ui)编写的 日志 消息现在以 "ui" 而不是 "?" 为前缀。

UI

vim.ui.open()(默认绑定到 gx)接受一个 opt.cmd 参数,该参数控制用于打开给定路径或 URL 的工具。如果要全局设置此参数,可以使用 vim.paste() 中描述的相同方法来覆盖 vim.ui.open。
vim.ui.open() 现在支持 [lemonade](https://github.com/lemonade-command/lemonade) 作为打开 url/文件的选项。如果您处于 ssh 连接中并使用 lemonade,这将非常方便。
ins-completion-menu 现在支持级联突出显示样式。 hl-PmenuSelhl-PmenuMatch 都继承自 hl-Pmenu,而 hl-PmenuMatchSel 继承自 hl-PmenuSelhl-PmenuMatch 的突出显示。

已更改的功能 news-changed

这些现有功能改变了其行为。
'scrollbind' 现在可以与包含虚拟行的缓冲区正常工作。
Scrollbind 通过将每个选项卡页中的每个窗口的顶部目标行对齐来工作。以前,这是通过计算旧的顶部行和目标顶部行之间的差异,并通过该差异滚动来完成的。现在,顶部行使用屏幕行号计算,这些行号考虑了虚拟行。
字形集群(或组合字符 mbyte-combining)的实现已升级,以紧密遵循 Unicode 标准中 UAX#29 定义的扩展字形集群。值得注意的是,这使得可以正确显示比以前更多的表情符号字符,包括那些使用多个表情符号代码点与 ZWJ(零宽度连接符)代码点组合编码的字符。
'statusline''tabline''winbar' 中的文本现在继承自相应的 hl-StatusLinehl-TabLinehl-WinBar 突出显示组。
vim.on_key() 回调在回调本身使用输入时不会被递归调用。
手册页中的 "q" 现在使用 CTRL-W_q 而不是 CTRL-W_c 关闭当前窗口,当屏幕上只有一个窗口时它不再抛出 E444。全局变量 vim.g.pager 已被删除。

已删除的功能 news-removed

这些已弃用的功能已被删除。
N/A

已弃用 news-deprecations

请参阅 deprecated-0.11
命令索引
快速参考