乐于分享
好东西不私藏

告别插件堆砌!Neovim配置瘦身实战

告别插件堆砌!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替代"全家桶"

是目前配置瘦身运动中最受关注的工具集。它提供了一套模块化的轻量替代品,每个模块独立可用。
一位在400万行代码、4万文件的 monorepo 中工作的系统程序员分享了他的替换经验:
成功替换的

0pt;">原插件

Mini 替代

效果

vim-startify(启动页)

Mini.starter

✅ 更轻量,Lua 编写

illuminate.nvim(词语高亮)

Mini.cursorword

✅ 功能完全一致

which-key.nvim(键位提示)

Mini.clue

✅ 极简设计,浮动窗口正合适

自定义会话管理

Mini.session

✅ 告别自己写 Vimscript

gitsigns.nvimGit 标记)

Mini.diff

✅ 可用,但需要手动调整配置

暂未替换的(保留原插件)

0pt;">原插件

考虑过 Mini 替代

保留原因

Oil.nvim(文件浏览器)

Mini.files

浮动窗口不如普通缓冲区直观

fzf-lua(模糊查找)

Mini.pick

性能略慢,缺少侧边预览

fugitive.vimGit 操作)

Mini.git

无法查看完整 Git 索引状态

fidget.nvimLSP 通知)

Mini.notify

通知文本不对齐,信息可读性差

核心结论是:Mini系列在小功能上表现优异,但核心复杂功能暂时还无法完全替代成熟的主流插件

第四步:精简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

插件列表

原则是"够用就好",不要为了所谓的"工程化"而创建十几个配置目录。

实战对照清单

0pt;">功能

插件堆砌方案

瘦身方案

插件管理

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

最后:何时保留插件

配置瘦身不是"为删而删"。以下情况建议保留原插件:
  1. 工作流依赖:如果某个插件已经成为你日常开发的核心环节,不要轻易替换
  2. 性能无明显优势:mini 替代品有时在大型项目上性能略逊
  3. 功能差异明显:如 fugitive.vim 的完整 Git 工作流,mini.git 暂无法替代

写在最后

配置瘦身的本质不是追求"代码最少",而是让每一行配置都服务于你的实际需求
从 493 行到 55 行,减掉的不是功能,而是冗余。留下的每一行配置,都是你真正理解和需要的东西。
这或许才是 Neovim 配置的"终极形态":简洁、可控、够用