新闻 - 0.9

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


自 Nvim 0.8 以来的重大更改

重大更改

以下更改可能需要调整用户配置或插件。
Cscope 支持现已移除(参见 cscopenvim-removed
已移除的命令
:cscope
:lcscope
:scscope
:cstag
已移除的选项
cscopepathcomp
cscopeprg
cscopequickfix
cscoperelative
cscopetag
cscopetagorder
cscopeverbose
已移除的 Eval 函数
cscope_connection()
注意:ctags 的支持仍然存在,没有计划移除。
:hardcopy 现已移除(参见 hardcopynvim-removed
已移除的命令
:hardcopy
已移除的选项
printdevice
printencoding
printexpr
printfont
printheader
printmbcharset
'paste' 选项现已弃用,'pastetoggle' 已移除。paste 在 GUI 和终端 (TUI) Nvim 中自动工作。只需粘贴它。™
它现在返回 string,而不是 string|string[]|nil
concat 选项已被移除,因为它没有被一致地应用。
无效范围现在会引发错误,而不是返回 nil
help treesitter 解析器已重命名为 vimdoc。唯一对用户可见的更改是,特定于语言的突出显示组需要从 @foo.help 重命名为 @foo.vimdoc
'commentstring' 的默认值现在为空,而不是 "/*%s*/"。
libiconv 和 intl 现在是必需的构建依赖项。

新功能

添加了以下新的 API 或功能。
help 文件的 Treesitter 语法高亮现在支持突出显示的代码示例。要启用它,请在 .config/nvim/ftplugin/help.lua 中创建以下内容
vim.treesitter.start()
注意: 突出显示的代码示例仅在 Nvim 手册中可用,不在从 Vim 获取的帮助文件中可用。treesitter vimdoc 解析器也正在开发中,不能保证它能够正确突出显示所有帮助文件。
为 LSP 客户端添加了对语义令牌突出显示的支持。当支持此功能的客户端附加到缓冲区时,默认情况下会启用此功能。可以通过从 LSP 客户端的 {server_capabilities} 中的 LspAttach 回调删除 semanticTokensProvider 来执行退出。
更多信息请参见 lsp-semantic-highlight
vim.inspect_pos()vim.show_pos():Inspect 允许用户获取或显示给定缓冲区位置处的项目。目前,这包括 treesitter 捕获、LSP 语义令牌、语法组和 extmark。
vim.treesitter.inspect_tree():InspectTree 打开一个分割窗口,显示当前缓冲区中的语言树节点的文本表示。
'statuscolumn' 选项用于自定义窗口侧面的区域,通常包含折叠、符号和数字列。此新选项遵循 'statusline' 语法,可用于转换行号、为 符号 创建鼠标单击回调、引入自定义边距或分隔符等。
vim.secure.trust():trust 允许用户管理信任数据库中的文件。vim.secure.read() 读取文件,并询问用户是否应信任该文件,如果是,则返回该文件的内容。由 'exrc' 使用
EditorConfig 支持现已内置。默认情况下启用此功能,并且会自动发生。要禁用它,用户应添加
vim.g.editorconfig = false
(或 Vimscript 等价物)到其 config 文件中。
一个名为 NVIM_APPNAME 的新环境变量启用配置 Nvim 应该在其处查找其配置和状态文件的目录。请参见 :help $NVIM_APPNAME
添加了使用 -l 从 shell 运行 Lua 脚本的支持。
nvim -l foo.lua --arg1 --arg2
也适用于 stdin
echo "print(42)" | nvim -l -
为 Lua 添加了一个 omnifunc 实现,vim.lua_omnifunc()
添加了一个新的实验性 vim.loader,它可以对 Lua 文件进行字节编译和缓存。要启用新的加载程序,请在您的 init.lua 的开头添加以下内容
vim.loader.enable()
添加了 vim.version,用于解析和比较符合 semver 规范的版本字符串。
在 tmux 3.2 或更高版本中使用 Nvim 时,默认的剪贴板提供程序现在将复制到系统剪贴板。provider-clipboard
'showcmdloc' 选项用于在状态行或选项卡行中显示 'showcmd' 信息。一个新的 %S 状态行项目可用于在自定义 'statusline' 中放置 'showcmd' 文本。在 'cmdheight' 设置为 0 时很有用。
'splitkeep' 选项用于控制水平分割的滚动行为。
'wildoptions' 标志 "fuzzy" 在 cmdline-completion 期间启用 模糊匹配
'diffopt' 现在包含一个 linematch 选项,用于对单个块启用第二阶段 diff,以提供更准确的 diff。此选项也可用于 vim.diff()
--remote-ui 选项已添加用于连接到远程实例并在本地终端的 TUI 中显示它。这可用于在后台运行无头 nvim 实例并在需要时显示其 UI,以前只能使用外部 UI 实现来实现。
添加了一个 vim.lsp.codelens.clear() 函数来清除代码透镜。
为 LSP 客户端添加了对 willSavewillSaveWaitUntil 功能的支持。willSaveWaitUntil 允许服务器在保存文档之前修改文档。语言服务器的示例用例包括删除未使用的导入或格式化文件。
为 LSP 客户端添加了对 workspace/didChangeWatchedFiles 功能的初步支持,以通知服务器磁盘上的文件更改。默认情况下该功能被禁用,可以通过设置 workspace.didChangeWatchedFiles.dynamicRegistration=true 功能来启用它。
vim.diagnostic.is_disabled() 检查在给定缓冲区或命名空间中是否禁用了诊断。
Treesitter 捕获现在可以通过指令进行转换。这将允许更复杂的动态语言注入。
vim.treesitter.get_node_text() 现在接受一个 metadata 选项,用于使用 vim.treesitter.query.add_directive() 编写自定义指令。
vim.treesitter.language.add() 替换 vim.treesitter.language.require_language
vim.treesitter.foldexpr() 可用于 'foldexpr',以使用 treesitter 进行折叠。
使用以下内容扩展了 TSNode API
此外,TSNode:range() 现在接受一个可选的 {include_bytes} 参数。
Treesitter 注入查询现在使用在 https://tree-sitter.github.io/tree-sitter/syntax-highlighting#language-injection 中描述的格式。对先前格式的支持将在未来的版本中移除。
添加了 nvim_get_hl(),用于以与 nvim_set_hl() 兼容的格式获取突出显示组定义。
vim.filetype.get_option() 用于获取特定文件类型的默认选项值。这是对 nvim_get_option_value() 的包装,具有缓存功能。
require'bit' 现在始终可用 lua-bit

已更改的功能

对现有 API 或功能的以下更改添加了新行为。
'exrc' 现在支持 .nvim.lua 文件。
'exrc' 不再被标记为已弃用。
TUI 已更改为在单独的进程中运行(以前,使用单独的线程)。这应该不是对用户的可见更改,但可能是细微行为更改和错误的原因。
以前,TUI 可以作为构建时功能 (+tui/-tui) 禁用,导致一个 nvim 二进制文件,该文件只能无头运行或嵌入到外部进程中。从本版本开始,TUI 始终可用。
Vim 的 has('gui_running') 现在受支持,作为插件检查是否将 GUI(不是 TUI)附加到 Nvim 的一种方式。has()
msgsep 现在始终启用,即使 'display' 不包含 "msgsep" 标志。当显示长于 'cmdheight' 的消息时,不再可能滚动整个屏幕。
API 调用现在显示有关异常发生位置的更多信息。
win_viewport UI 事件现在包含有关虚拟行的信息,这意味着现在可以更一致地实现平滑滚动。
:= {expr} 语法可用于评估 Lua 表达式,作为 :lua ={expr} 的简短形式。:=:[range]= 在没有参数的情况下保持不变。但是,使用 ex-flags:=# 和类似变体不再受支持。
channel-stdio 关闭时,现在将保留未保存的更改,而不是丢弃它们。
nvim_open_win() 现在接受一个相对的 mouse 选项,以相对于鼠标打开一个浮动窗口。请注意,在没有设置 vim.o.mousemoveevent = true 的情况下,鼠标不会频繁更新。
nvim_eval_statusline() 支持通过新的 opts 字段评估 'statuscolumn'use_statuscol_lnum
nvim_buf_get_extmarks() 现在接受一个 -1 ns_id 来请求来自所有命名空间的 extmark,并将命名空间 ID 添加到 details 数组。已将其他缺失的属性添加到 details 数组,并且可以通过类型过滤标记。
vim.diagnostic.open_float()(因此 vim.diagnostic.config())现在接受一个 suffix 选项,该选项默认情况下会呈现 LSP 错误代码。类似地,vim.diagnostic.config() 中的 virtual_text 配置现在也有一个 suffix 选项,默认情况下不做任何事情。
vim.fs.dir() 现在有一个 opts 参数,带有一个 depth 字段,允许递归搜索目录树。
vim.gsplit() 支持 vim.split() 的所有功能。
:highlight 现在支持一个额外的属性 "altfont"。
:Man 手册页查看器支持包含空格的手册页名称。
nvim_select_popupmenu_item() 现在支持 cmdline-completion 弹出菜单。
nvim_list_uis() 报告所有 ui-option 字段。
nvim_get_option_value() 现在有一个 filetype 选项,因此它可以返回特定文件类型的默认选项。
构建:对代码生成脚本进行了多项改进,使其更加确定性,并且引入了 LUA_GEN_PRG 构建参数,以便为一些剩余的重现性问题提供变通方案。

已移除的功能

已移除以下弃用函数或 API。
filetype.vim 已被移除,改为使用 vim.filetype(请注意,文件类型逻辑和测试仍然与 Vim 保持一致,因此需要先在 Vim 中进行添加或更改。)请参见 https://github.com/neovim/neovim/pull/20674
'hkmap''hkmapp''aleph' 选项已移除。请改用 'keymap' 选项。
LanguageTree:parse() 不再返回更改的区域。请改用 on_changedtree 回调。
vim.highlight.create()vim.highlight.link() 已移除,请改用 nvim_set_hl()
require'health' 已移除。请改用 vim.health

弃用

请参见 deprecated-0.9
主要
命令索引
快速参考