告别插件堆砌!Neovim配置瘦身实战
当你的 lua/plugins/ 目录比项目代码还长,也许是时候重新思考了
从 493 行到 55 行:一个真实案例
最近在 Fosstodon 上看到一位开发者分享他的 Neovim 配置重构经历:配置文件从 493 行骤降到 55 行,减少了近 90% 的代码量。
他不是在删功能,而是在做一件事:用 Neovim 原生能力和轻量替代品,替换掉堆砌的插件。
如果你也有这样的感受:
• 启动 Neovim 要等好几秒
• lua/plugins/ 目录下躺着几十个配置文件
• 很多插件的功能你只用到了 10%
• 每次更新插件都提心吊胆怕崩
那这篇文章就是为你写的。


第一步:重新审视"必需品"
在动手之前,先问自己一个问题:我真的需要这个插件吗?
Neovim 在 0.11 和 0.12 版本中引入了大量内置功能。很多以前必须靠插件实现的需求,现在原生就能搞定。
一个深度优先的配置哲学值得借鉴:从完全未修改的 Neovim 开始,慢慢添加功能——但只在完全理解已有功能之后。毕竟,80% 的工作流只包含少数几个操作,让这些操作变快,远比堆砌一堆不常用的功能重要。
第二步:原生插件管理器 vim.pack
Neovim 0.12 引入的 vim.pack API 让你彻底告别第三方插件管理器。
以前用 lazy.nvim 或 packer.nvim 需要写一堆启动配置,现在只需要:
lua
vim.pack.add({
{ src = "neovim/nvim-lspconfig" },
{ src = "nvim-treesitter/nvim-treesitter" }
})
优势:无需启动开销,没有锁文件困扰,插件加载逻辑完全透明。
不过要注意,vim.pack 的设计哲学是"做最少的事",不提供版本锁定、自动更新等高级功能。如果你需要这些,可以权衡利弊。
第三步:用 Mini.nvim 替代"全家桶"
Mini.nvim 是目前配置瘦身运动中最受关注的工具集。它提供了一套模块化的轻量替代品,每个模块独立可用。
一位在 400 万行代码、4 万文件的 monorepo 中工作的系统程序员分享了他的替换经验:
成功替换的:
原插件 Mini 替代 效果
vim-startify(启动页) Mini.starter ✅ 更轻量,Lua 编写
illuminate.nvim(词语高亮) Mini.cursorword ✅ 功能完全一致
which-key.nvim(键位提示) Mini.clue ✅ 极简设计,浮动窗口正合适
自定义会话管理 Mini.session ✅ 告别自己写 Vimscript
gitsigns.nvim(Git 标记) Mini.diff ✅ 可用,但需要手动调整配置
暂未替换的(保留原插件):
原插件 考虑过 Mini 替代 保留原因
Oil.nvim(文件浏览器) Mini.files 浮动窗口不如普通缓冲区直观
fzf-lua(模糊查找) Mini.pick 性能略慢,缺少侧边预览
fugitive.vim(Git 操作) Mini.git 无法查看完整 Git 索引状态
fidget.nvim(LSP 通知) Mini.notify 通知文本不对齐,信息可读性差
核心结论是:Mini 系列在小功能上表现优异,但核心复杂功能暂时还无法完全替代成熟的主流插件。
{{西游记孙悟空被压山下.png(uploading...)}}
第四步:精简 LSP 和补全配置
在 LSP 方面,Neovim 内置的 LSP 支持已经相当完善。
对比两种路线:
路线一:使用 Mason + lspconfig(常规做法)
• 优点:安装方便,一键安装语言服务器
• 缺点:多了一层依赖,跨机器同步配置可能出问题
路线二:手动安装 LSP,直接用内置 LSP
• 优点:减少插件依赖,配置更可控
• 缺点:需要手动管理语言服务器版本
补全方面,blink.cmp 正在成为新宠。它比 nvim-cmp 更轻量,配置更简洁,目前已成为许多精简配置的首选。
第五步:目录结构瘦身
一个典型的精简配置目录结构应该是这样的:
text
~/.config/nvim/
└── init.lua # 单文件搞定一切
或者适度拆分:
text
~/.config/nvim/
├── init.lua
└── lua/
├── options.lua # 基础选项
├── keymaps.lua # 快捷键
└── plugins.lua # 插件列表
原则是"够用就好" ,不要为了所谓的"工程化"而创建十几个配置目录。
实战对照清单
功能 插件堆砌方案 瘦身方案
插件管理 lazy.nvim (数百行配置) vim.pack (几行)
补全 nvim-cmp + 各种 source blink.cmp (单文件配置)
文件查找 telescope.nvim (复杂配置) mini.pick 或 fzf-lua (精简)
Git 标记 gitsigns.nvim mini.diff
键位提示 which-key.nvim mini.clue
启动页 alpha.nvim / startify mini.starter
{{牛顿.png(uploading...)}}
最后:何时保留插件
配置瘦身不是"为删而删"。以下情况建议保留原插件:
- 工作流依赖:如果某个插件已经成为你日常开发的核心环节,不要轻易替换
- 性能无明显优势:mini 替代品有时在大型项目上性能略逊
- 功能差异明显:如 fugitive.vim 的完整 Git 工作流,mini.git 暂无法替代
写在最后
配置瘦身的本质不是追求"代码最少",而是让每一行配置都服务于你的实际需求。
从 493 行到 55 行,减掉的不是功能,而是冗余。留下的每一行配置,都是你真正理解和需要的东西。
这或许才是 Neovim 配置的"终极形态":简洁、可控、够用。
浙公网安备 33010602011771号