告别插件堆砌!Neovim 配置“瘦身”实战:用 Mini.nvim 替换主流插件全过程

codigger
• 阅读 5

转Reddit技术博主的帖子:我的 Neovim 插件哲学 作为一名资深的系统程序员,我日常工作会处理大型的单体代码仓库(monorepos),项目文件数超过 4 万,代码行数超过 400 万。在这样的环境下,我对开发工具的要求是:极简、高效、启动快。 我的插件哲学是:尽可能少用插件,尽可能少用花哨功能,只保留工作必需的核心特性。 我对 Mini.nvim(或者任何类似的 Neovim 功能标准库)的理念非常认同。它提供了一套几乎是所有 Neovim 用户都需要的基础功能,而这些功能可能还不适合直接集成到 Neovim 核心中。我认为,一个现代化的编辑器不应该要求用户“从零开始”,四处搜寻并盲目安装 10 到 20 个主流插件才能获得一套完整的功能。 这次尝试,我就是想看看能否用 Mini.nvim 替换掉我配置中那些“常规”的插件,实现一次彻底的配置“瘦身”。 注意: 我目前使用 Neovim Nightly 版本,并继续使用 pack 进行插件管理(不切换到 Lazy 或 Packer 等),这个依赖管理方式不会改变。 插件对决:Mini.nvim vs. 常规插件 告别插件堆砌!Neovim 配置“瘦身”实战:用 Mini.nvim 替换主流插件全过程 接下来,我将按照功能模块,逐一分享我使用 Mini 系列插件替换主流插件的体验和决定。

  1. 文件浏览器 (File Explorer) 常规插件 Mini.nvim 替代品 切换结果 Oil.nvim Mini.files 未切换 体验与分析: Mini.files 倾向于使用浮动窗口 (popup window) 来显示文件列表,这是我遇到的第一个主要“痛点”。在我看来,文件浏览这种功能,在普通缓冲区 (normal buffer) 中展示才更合理,或者至少应该提供在缓冲区中打开的选项。 浮动窗口的弊端: 使用浮动窗口意味着:预览窗口会不断地向右侧移动和重新调整大小,眼睛需要频繁横跨屏幕;打开文件需要按两次键(l 和 q),而不是使用更直观的 同时完成打开文件和关闭界面的操作。 我的结论: 虽然浮动窗口在需要同时打开多个分屏的特定场景下有用,但对我来说,全缓冲区的视图才是更主流、更高效的工作方式。因此,我保留了 Oil.nvim。
  2. 会话管理 (Session Management) 常规配置 Mini.nvim 替代品 切换结果 自定义 Vimscript/Lua Mini.session 切换成功 体验与分析: 我过去不得不自己编写一些 Vimscript/Lua 来实现本地会话管理。Mini.session 成功地让我抛弃了这些自定义代码,这是一个重大的改进,切换成功。
  3. 启动页 (Startup Screen) 常规插件 Mini.nvim 替代品 切换结果 vim-startify Mini.starter 切换成功 体验与分析: Mini.starter 使用 Lua 编写,更加极简,完全能够满足启动页的需求,我非常喜欢,切换成功。
  4. 模糊查找器 (Fuzzy Finder) 常规插件 Mini.nvim 替代品 切换结果 fzf-lua Mini.picker 未切换 体验与分析: Mini.picker 仍然采用了浮动窗口。虽然 Mini.files 提供了侧边预览(但有上述问题),但 Mini.picker 却没有侧边栏的文件预览(虽然可以通过 深入预览)。 一致性问题: 在文件列表中选择文件时需要侧边预览,但在模糊查找文件名时却不需要?我感到这种设计不一致。 界面空间浪费: 当我查找文件时,我的主要目标是看到查找器和文件预览,不需要看到后面已经打开的六个窗口。浮动窗口在模糊查找时浪费了大量的屏幕空间。 性能: 在处理某些任务时,我感觉 Mini.picker 略慢于 fzf-lua。 尽管我很想为了减少依赖而切换,但考虑到体验和性能,我最终没有切换。
  5. 词语高亮 (Word Highlighting) 常规插件 Mini.nvim 替代品 切换结果 illuminate.nvim Mini.cursorword 切换成功 体验与分析: 功能完全一致,即插即用,轻松获胜,切换成功。
  6. 键位提示 (Keymap Hint) 常规插件 Mini.nvim 替代品 切换结果 which-key.nvim Mini.clue 切换成功 体验与分析: Mini.clue 提供了很多默认的可选键位映射,并且设计上极简。这是一个小小的浮动窗口真正发光发热的领域,因此我切换成功。
  7. Git 核心操作 (Git Wrapper) 常规插件 Mini.nvim 替代品 切换结果 fugitive.vim Mini.git 未切换 体验与分析: 我不理解 Mini.git 文档中提出的哲学观点:Git 封装器应该只关注当前缓冲区的“工作集”。 逻辑矛盾: Git 是在仓库/索引级别工作的。为什么我们不应该关心那些可能被暂存(staged)但未在当前缓冲区打开的文件?如果我在当前缓冲区添加了代码块(hunks),我肯定想查看整个 Git 索引状态。 工作流割裂: 作者似乎建议使用 lazygit 来查看索引,但这又带来了工作流的割裂。如果 fugitive 的 :G 视图已经能让我们在 Neovim 中完成大部分简单的 Git 流程,为什么还要拆分? 出于对完整 Git 工作流的需求,我没有切换。
  8. Git 侧边标记 (Git Signs) 常规插件 Mini.nvim 替代品 切换结果 gitsigns.nvim Mini.diff 切换成功 体验与分析: 小问题: 尽管文档声称默认使用行号列(number column),但它却默认使用了标记列(sign column)。我需要手动设置才能符合预期。 键位绑定问题: 它似乎自动添加了以 g. 开头的键位绑定。我强烈反对插件在未经我明确要求或手动配置的情况下,自动添加键位绑定。 保留原因: 我最终保留了 Mini.diff,仅仅是因为我喜欢使用行号列来标记 Git 差异代码块(hunks),从而将标记列专门留给 LSP 诊断信息。
  9. LSP 通知与诊断 (LSP Notifications) 常规插件 Mini.nvim 替代品 切换结果 fidget.nvim Mini.notify 未切换 体验与分析: Mini.notify 的一个关键问题是:通知文本默认不进行对齐(justified)。 可读性问题: fidget 会将文本对齐到虚拟文本(virtual text)所在的一侧。Mini.notify 缺乏对齐,使得快速滚动的文本难以阅读。 定制化困境: 我原本非常看好这个小型功能。但为了让它正常工作并正确格式化 LSP 文本,我感觉自己需要编写的代码量,几乎可以自己创建一个新的浮动窗口了。 实际效果: 在大型项目、或是有错误的工程中观察 LSP 加载和报错信息时,Mini.notify 在传达正在发生的事情方面基本无用。 因此,我没有切换。 告别插件堆砌!Neovim 配置“瘦身”实战:用 Mini.nvim 替换主流插件全过程

使用过程中的小槽点 (Nits) 在使用 Mini.nvim 插件集的过程中,我也发现了一些可以改进的小地方: 默认启用图标 所有的 Mini 插件默认都启用图标。要知道,图标需要打了补丁的字体(patched fonts)。 令人不解的是,禁用图标的配置方式非常复杂,需要传递一个完整的函数(例如 content = { prefix = function() end }),而不是简单的 icons = false 这样的布尔值开关。 文档问题 部分文档内容有些冗长,偶尔难以跟进其思路,但总的来说还是能找到所需信息。 值得称赞的是,MiniMax 的功能对比部分甚至比官方文档更有帮助,尤其是其提供的功能集与主流插件的对比非常实用。 告别插件堆砌!Neovim 配置“瘦身”实战:用 Mini.nvim 替换主流插件全过程 总结:总体评估与未来展望 通过这次“配置瘦身”尝试,我得出了以下结论:

1.小型插件的胜利: 我非常满意地用 Mini 版本的插件替换掉了好几个小型功能插件(如启动页、词语高亮、键位提示等)。 2. 核心功能仍需完善: 对于一些核心且复杂的功能(如文件浏览、模糊查找、Git 核心操作),我感到有些遗憾,因为它们仍无法替换掉我习惯使用的那些主流插件。 3. 未来展望: 如果 Mini.nvim 能够解决我提到的这些“小槽点”(特别是浮动窗口的默认行为、通知文本的对齐和默认图标设置),我非常乐意尝试构建一个完全基于 Mini 的 Neovim 配置。

Mini.nvim 的理念是正确的,它正在朝着构建一个更合理、更集成化的 Neovim 基础配置迈进,我期待它的后续发展。

点赞
收藏
评论区
推荐文章
九路 九路
4年前
【vscode折腾系列】更换vscode背景图
写前端代码时,用过webstorm,sublime,vscode,最终还是选择了vscode,主要原因是(好看)简洁的编程环境,丰富的插件功能,活跃的社区。不过无论是哪一个编辑器,长时间看着黑色/白色的背景难免单调,喜欢折腾(不专心写代码)的我开始想着给vscode换个背景,百度了一下,还真有人写了这样的一个插件background。  闲话少叙
Johnny21 Johnny21
4年前
elasticsearch教程--Plugins篇
目录概述环境准备认识es插件插件安装插件管理命令彩蛋概述上一篇博文记录了,在地大物博的祖国使用es,不得不考虑中文分词器,es内置的分词器对中文分词的支持可以用惨不忍睹来形容不为过,如果想安装中文分词器,就需要借助es的插件。本文将记录一下项目中如何使用插件,希
「重构:改善既有代码的设计」实战篇
背景在软件开发的世界里,代码重构是提升项目质量、适应业务变化的关键步骤。最近,我重新翻阅了《重构:改善既有代码的设计第二版》,这本书不仅重新点燃了我对重构的热情,还深化了我的理解:重构不仅仅是代码层面的整理,它更是一种软件开发的哲学,强调持续改进和适应变化
Stella981 Stella981
4年前
IntelliJ IDEA 安装Golang插件
网上的例子比较多,这里不重复,只解决我遇到的 新版本的Intellij无法安装插件的问题。1、输入仓库网址,搜索不到新的golang插件2、从https://plugins.jetbrains.com/plugin/5047golanguagegolangorgsupportplugin下载插件,选择“installplugin
Stella981 Stella981
4年前
HackBar破解(谷歌、火狐)
1.谷歌打开Chrome插件列表,查看Hackbar的插件ID:djmoeo……,在文件搜索里搜这段字符,我这里用的是Everything。!(https://img2018.cnblogs.com/blog/1392192/201907/139219220190701125726213948998123.png)Everyth
Stella981 Stella981
4年前
Intellij idea利用Statistic插件统计项目代码行数
1.插件介绍统计项目中各个文件的数量,大小,行数,平均等信息根据扩展名自定义统计详细行数信息,包括总行数,代码行数,代码行数占比,注释行数,注释行数占比,空白行数,空白行数占比自定义选择多个文件,统计各个文件信息本插件需要JDK8或以上版本2.插件安装利用在线或离线方式安装Statistic插件到idea中
京东云开发者 京东云开发者
3个月前
如何一眼定位SQL的代码来源:一款SQL染色标记的简易MyBatis插件
作者:京东物流郭忠强导语本文分析了后端研发和运维在日常工作中所面临的线上SQL定位排查痛点,基于姓名贴的灵感,设计和开发了一款SQL染色标记的MyBatis插件。该插件轻量高效,对业务代码无侵入,接入简单,支持SELECT、INSERT、UPDATE、DE
LibraHeresy LibraHeresy
2年前
如何快速完成 Microsoft Rewards 积分任务
微软现在推出了中国区的积分商城,里面奖品对我来说,最有吸引力的就是京东E卡,而面对重复繁琐的搜索任务,我自然是要寻找“捷径”的。方案1.谷歌插件ABSAutomatedBingSearches谷歌应用商店搜索插件名称,直接安装即可。点击StartSearc
京东云开发者 京东云开发者
7个月前
如何一眼定位SQL的代码来源:一款SQL染色标记的简易MyBatis插件
作者:京东物流郭忠强导语本文分析了后端研发和运维在日常工作中所面临的线上SQL定位排查痛点,基于姓名贴的灵感,设计和开发了一款SQL染色标记的MyBatis插件。该插件轻量高效,对业务代码无侵入,接入简单,支持SELECT、INSERT、UPDATE、DE
京东云开发者 京东云开发者
3个月前
如何一眼定位SQL的代码来源:一款SQL染色标记的简易MyBatis插件
作者:京东物流郭忠强导语本文分析了后端研发和运维在日常工作中所面临的线上SQL定位排查痛点,基于姓名贴的灵感,设计和开发了一款SQL染色标记的MyBatis插件。该插件轻量高效,对业务代码无侵入,接入简单,支持SELECT、INSERT、UPDATE、DE