Neovim 是 世界上最受欢迎的编辑器。这只是科学。
以下是 Neovim 2022 (Nvim 0.8) 开发的一些亮点。
首先是视觉效果!
:set laststatus=3
'winbar'
就像每个窗口顶部的一个额外的状态栏。它补充了 laststatus=3
set winbar=%f
set laststatus=3
'winbar'
和 'statusline'
获得了 对鼠标点击区域的支持(就像 ‘tabline’ 自 2016 年起就拥有的一样)。:set cmdheight=0
:set mousescroll=ver:5,hor:2
:set rnu nu
:let &stc='%#NonText#%{&nu?v:lnum:""}%=%{&rnu&&(v:lnum%2)?"\ ".v:relnum:""}%#LineNr#%{&rnu&&!(v:lnum%2)?"\ ".v:relnum:""}'
:set jumpoptions=view
vim.lsp.start({ name = 'godot', cmd = vim.lsp.rpc.connect('127.0.0.1', 6008) })
LspAttach
、LspDetach
。示例。vim.api.nvim_create_autocmd('LspAttach', {
group = yourGroupID,
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
your_callbac_func(client, args.buf)
end
}
vim.lsp.get_active_clients()
了解了如何过滤(这将是 Lua 标准库中的标准模式)。get_active_clients({id=42})
get_active_clients({bufnr=99})
get_active_clients({name='tsserver'})
:set diffopt+=linematch:60
vim.g.editorconfig_enable = false
'inccommand'
功能(自 2017 年起),它在您键入时显示 :substitute
(:s/foo/bar
) 的效果。:normal
和宏添加了预览。:normal
、:global 等等的实时预览奠定了基础。vim.api.nvim_create_user_command(
'MyCmd',
my_cmd,
{ …, preview = my_cmd_preview })
:write
命令 获得了 ++p
标志,因此这将创建父/目录/(如果它不存在)。:edit parent/dir/file.txt
:write ++p
$XDG_STATE_HOME
(~/.local/state) 而不是 $XDG_CACHE_HOME
(~/.cache) 中。此更改仅影响 macOS/unix,Windows 位置保持不变。stdpath('log')
来获取日志文件的推荐位置。:help :Man
) 中显示位置列表中的大纲(目录)。现在大纲也 列出了标志。before:
9.0ms: sourcing …/runtime/filetype.vim
after:
1.3ms: sourcing …/runtime/filetype.lua
nvim --startuptime
现在报告 Lua require()
时间。000.010 000.010: --- NVIM STARTING ---
000.198 000.188: event init
...
026.333 001.109 001.101: require('vim.lsp.protocol')
028.144 000.423 000.423: require('vim.lsp._snippet')
...
mouse=nvi
Type ":" (cmdline-mode) to temporarily disable mouse. Right-click shows a popup menu.
Try it!
nvim_cmd([list])
和“用户 cmd-preview”奠定了基础!对于定义自定义 cmdline (:
) 行为也非常有用。:echo nvim_parse_cmd('.,$g/foo/bar', {})
{
'cmd': 'global',
'args': ['/foo/bar'],
'mods': {…},
'magic': {'file': v:false, 'bar': v:false}
}
nvim_cmd()
以结构化的方式调用任何 Vim 遗留命令,例如 system([...])
。fnameescape()
:特殊字符由 magic
参数控制。nvim_cmd({cmd='vimgrep', args={'/%s/j', '**'}}, {})
vim.fs.find()
现在是查找“根文件”的规范方法,这在 LSP 配置中很常见。vim.cmd
是 Lua nvim_cmd
包装器。它支持将 Ex 命令作为函数而不是字符串调用。vim.cmd.colorscheme('nightfox')
“Lua 插件基本上与 vim 插件相同,只是文件扩展名是
.lua
而不是.vim
,并且文件包含 Lua 代码而不是 Vimscript。”
通过用 Lua + 树状解析器替换旧的 AWK 脚本,重写了 在线 Nvim 文档 的自动生成。 我们可以拥有美好的事物。
比较旧的布局(左)和新的布局(右)
Nvim 现在 设置 $NVIM
环境变量在 jobstart()
和 :terminal
作业中,因此子进程有一个明确的提示,表明它们是 Nvim 的子进程。旧的 $NVIM_LISTEN_ADDRESS
具有冲突的“双重用途”,不再传递给子进程。
Nvim UI 只是(反转的)插件。现在 nvim
本身就是一个 自托管 UI:当您在终端中运行 nvim
时,它会将 TUI 启动为一个 nvim --embed
子进程。
就像 Nvim GUI 一样,您可以将 nvim
TUI 连接到任何 Nvim 服务器以查看其 UI!您现在就可以尝试一下。
./foo
启动服务器(在当前目录中创建一个 foo
文件)。nvim --listen ./foo
./foo
相同的目录),将 nvim
连接到服务器。nvim --remote-ui --server ./foo
'insertmode'
选项,该选项在 Vim 中用于实现“简单 vim”。:help 'insertmode'
。:help lsp
) 重复。Neovim 是一款基于 Vim 的文本编辑器,专为 可扩展性 和 可用性 而设计,以鼓励新的应用程序和 贡献。
访问 #neovim:matrix.org 或 irc.libera.chat 上的 #neovim 与团队聊天。