乐于分享
好东西不私藏

Neovim 0.12 后,别急着删插件

Neovim 0.12 后,别急着删插件

如果你现在有一套稳定的 Neovim 配置,0.12 发布后第一件事不是重写,而是盘点。

别急着删 lazy.nvim。

别急着换掉 nvim-cmp。

别因为看到 vim.pack,就觉得自己的插件配置过时了。

0.12 确实重要。

它内置了 vim.pack,也继续增强 LSP、completion、diagnostics、statusline 和 UI。

但这些变化真正指向的,不是“插件都要被官方干掉”。

而是一个更重要的问题:

哪些能力应该交给 Neovim 核心,哪些能力仍然应该留给插件?

插件生态不会消失,但插件的价值说明书会被重写。

以前很多插件是在帮 Neovim 补基础设施。

以后,越来越多插件要证明自己不只是“补一个缺口”,而是在一个更强的核心之上,提供更好的工作流体验。

1. vim.pack 改变插件管理器的位置

先别急着问:lazy.nvim 会不会死?

vim.pack 真正改变的,不是某一个插件管理器的命运。

它改变的是插件管理器的位置。

过去,一个现代 Neovim 配置几乎绕不开第三方插件管理器。

你可能用过 vim-plug、packer.nvim、lazy.nvim、mini.deps。

它们解决的问题很基础:

  • • 插件从哪里来?
  • • 装在哪里?
  • • 怎么更新?
  • • 怎么锁版本?
  • • 怎么删除?
  • • 什么时候加载?

如果没有插件管理器,现代 Neovim 配置就很难组织起来。

但 0.12 之后,Neovim 自己开始提供 vim.pack

它支持安装、更新、删除 Git-based 插件,也有 lockfile。

这意味着一件事:

“能安装插件”本身,不再是第三方插件管理器的护城河。

因为 lazy.nvim 的价值从来不只是安装插件。

它还有更成熟的 lazy-loading、依赖处理、build step、插件 spec 组织、UI、profiling、生态惯性。

所以 vim.pack 不是简单地把 lazy.nvim 干掉。

更准确地说,它把插件管理器从“现代配置的必需品”,变成了“复杂配置的选择项”。

轻量用户可以只用 vim.pack

重度用户仍然可以继续用 lazy.nvim。

区别在于,第三方插件管理器以后要回答的问题变了。

以前它回答的是:

“没有我,你怎么装插件?”

以后它要回答的是:

“你的配置复杂到需要我提供更强的组织和加载能力吗?”

如果你的配置只有十几个插件,也不依赖复杂懒加载,不需要特别复杂的依赖图,那么 vim.pack 值得实验。

如果你大量依赖事件懒加载、文件类型加载、命令触发、按键触发、依赖管理和 build hooks,那就先别动。

稳定比赶潮流重要。

2. LSP / completion 改变基础插件的位置

第二个变化,是 LSP 和 completion。

这里也不要急着问:nvim-cmp 会不会死?

基础补全还值不值得交给一个完整插件框架?

过去很多人把 Neovim 配成 IDE,靠的是一组插件拼起来的体验。

  • • LSP 配置。
  • • 语言服务器安装。
  • • 补全菜单。
  • • snippet 展开。
  • • diagnostics 显示。
  • • code action。
  • • hover。
  • • rename。
  • • format。

这些能力里,有些已经在 Neovim 核心里很久了。

但 0.12 继续往前推了一步。

比如 :lsp 提供交互式 LSP client 管理。

vim.lsp.enable() 更像正式入口。

LSP 支持 inline completion、document color、document links、on-type formatting、selection ranges、pull diagnostics、workspace diagnostics。

completion 侧也增加了 'autocomplete'、popup menu 宽度和边框、排序和过滤相关能力。

这些变化说明 Neovim 核心正在把“IDE 基础能力”越做越完整。

以前你可能必须靠一组插件才能获得一个像样的 LSP / completion 体验。

以后,对轻量用户来说,核心能力可能已经足够覆盖日常需求。

但这不等于 nvim-cmp、blink.cmp、LuaSnip 没价值。

因为重度用户关心的不是“有没有补全菜单”。

而是:

  • • 补全来源够不够多。
  • • 排序够不够符合习惯。
  • • UI 是否舒服。
  • • snippet integration 是否顺。
  • • AI completion 能不能接进去。
  • • 不同语言里的行为是否稳定。

这些仍然是插件生态擅长的地方。

所以真正会被压缩的,不是所有 completion 插件。

被压缩的是“只提供基础补全”的位置。

留下来的是“提供更好补全体验”的位置。

LSP 也是一样。

Neovim 的 built-in LSP 越正式,围绕 LSP 的插件就越不能只停留在“帮你启动客户端”。

它们要么提供更好的默认配置,要么管理 language server,要么处理跨语言细节。

以前插件负责把 Neovim 补成 IDE。

以后插件要在一个更像 IDE 的核心上,继续提供更高层的体验。

3. UI / workflow 插件最不该急着删

最不适合急着动的,是 UI 和 workflow 插件。

很多人看到 0.12 里有 UI2、default statusline、progress message、diagnostic status,就会问:

那 noice.nvim、nvim-notify、lualine、trouble 这些还要吗?

UI 层最不该因为 0.12 就急着删插件。

UI 拼的不是 API 有没有。

UI 拼的是体验。

是审美。

是信息密度。

是你每天写代码时是否顺手。

0.12 的 UI2 还是 experimental。

它说明 Neovim 核心在探索更现代的消息和命令行体验,但还不能把它写成“官方 UI 插件替代方案”。

default statusline 变强,也不等于状态栏插件没有价值。

因为很多人用 lualine,不只是为了显示诊断数量。

他们还想显示 Git 分支、文件类型、LSP 状态、格式化状态、宏录制状态、当前工作区信息。

同样,picker、notification、Git UI、debug UI、problem list 这些东西,本来就高度依赖个人工作流。

Telescope 或 fzf-lua 不是只在做“搜索”。

它们是在把文件、buffer、grep、commands、Git、LSP symbol 组织成一个统一入口。

trouble.nvim 也不是只在“显示诊断”。

它是在把 diagnostics、quickfix、workspace problems、导航和过滤组织成一种阅读问题的方式。

这类插件的价值,不是核心有没有某个 API。

而是它能不能把底层能力组织成一套更顺的工作流。

UI / workflow 层应该是最慢迁移的一层。

如果你的 UI 插件稳定,就继续用。

等核心能力稳定、生态也形成新共识,再考虑替换。

4. 新手和老用户该怎么处理

如果你是新手,0.12 对你最大的影响不是“少装几个插件”。

而是你可以用更贴近核心的方式理解 Neovim。

以前很多新手一入坑,就会复制一整套 dotfiles。

看起来很快。

实际很危险。

因为你不知道哪一层负责文件搜索,哪一层负责 LSP,哪一层负责补全,哪一层只是 UI 美化。

一旦出问题,你只能整块怀疑自己。

0.12 之后,更好的入门方式是:

  • • 先理解核心能做什么。
  • • 再决定哪些地方需要插件。

比如你可以按五个能力检查:

  • • 文件浏览。
  • • 搜索。
  • • LSP。
  • • 补全。
  • • 基础快捷键。

这五个能力能跑起来,你就已经有一个最小可用 Neovim。

不要一上来装 30 个插件。

不要因为别人说 0.12 可以原生化,就一开始追求“零插件配置”。

零插件不是目标。

理解每个插件为什么存在,才是目标。

如果你已经用了 Neovim 很久,0.12 最容易带来的不是机会,而是焦虑。

你会看到很多人重写配置。

有人迁移 vim.pack

有人不用 nvim-cmp。

有人把 Mason 换成系统包管理器。

有人说现在配置可以更 lean。

这些都可以参考。

但不要被带着跑。

你的配置如果稳定,就先别动主线。

更好的做法是开一个实验分支,按层测试。

  • • 插件管理可以实验。
  • • LSP 可以逐步向核心入口靠拢。
  • • Completion 可以根据复杂度决定是否保留框架。
  • • UI / workflow 最好慢一点。
  • • Git、debug、test runner、project workflow 继续按实际需求选插件。

老用户最应该避免的,不是继续用旧插件。

而是被版本焦虑逼着重写一套本来稳定的配置。

5. 给你的配置做一张盘点表

如果你想现在就做点什么,可以不用重写配置。

先做一张表。

第一列:插件名。

第二列:它解决哪一层问题。

第三列:核心现在是否已经覆盖 60% 以上。

第四列:你是否依赖它的高级体验。

第五列:是否适合迁移实验。

大概可以这样分:

层级
典型插件
现在该怎么做
插件管理
lazy.nvim、packer.nvim、mini.deps、vim-plug
可以实验 vim.pack,但不要动稳定主线
LSP
nvim-lspconfig、Mason、mason-lspconfig
可以逐步向核心入口靠拢,但语言服务器管理仍要看生态
Completion
nvim-cmp、blink.cmp
轻量用户可以试原生,重度用户继续保留插件
Snippets
LuaSnip、friendly-snippets
谨慎,不要被“原生化”标题带跑
UI
noice.nvim、nvim-notify、lualine、trouble
慢一点,等核心能力和生态共识稳定
Workflow
Telescope、fzf-lua、Git、Debug、Test 插件
继续按实际工作流选择,不要为了 0.12 强行替换

这个动作比“删不删 lazy.nvim”有用得多。

因为它让你从版本新闻回到自己的工作流。

Neovim 的配置从来不是为了追最新。

是为了让你每天写代码更顺。

Closing

所以,Neovim 0.12 之后,插件生态会被重写吗?

会。

但不是被重写成“没有插件”。

而是插件该站的位置变了。

核心负责越来越多稳定、通用、高频的基础能力。

插件负责更高层的体验、更复杂的工作流、更个性化的组织方式。

你真正要做的,不是追着版本重写配置。

而是打开自己的插件列表,挨个问一遍:

它是在补核心没有的能力,还是在提供我离不开的体验?

别追版本,盘点配置。