外观
数十亿台计算机背后的编辑器,以及它 32 年的守护者
这是一篇搬运文章,原文见:https://canartuc.medium.com/billions-of-computers-run-his-editor-he-managed-it-for-32-years-6a283fdec2f8
三十多年来,几乎地球上每一台 Unix 系统都静静地放着一个文本编辑器。
无论是在世界某个数据中心启动一台服务器,还是在某人车库运行一块树莓派,又或者是一家咖啡馆刚拆封的全新 Mac,在你到来之前,它就已经安装好了,而且和三十年前几乎还是同一个程序。
大多数开发者至少都曾不小心打开过它一次:敲几个字符,突然发现不知道该怎么退出,于是不得不网上搜索“如何退出”。有一个人决定了这个编辑器会变成什么样子,而这件事几乎完全是他独自完成的。
他在 Unix 上学会了 vi。1988 年买了一台 Amiga 电脑后,却找不到能在上面运行的版本,于是便从一个克隆程序开始,动手实现了一个。他阅读每一份 bug 报告,批准补丁,也拒绝补丁;他掌握着整个项目唯一拥有最高权限的账户,却从未索求回报。如果这个编辑器为你节省了时间,他只希望你向乌干达一个村庄的儿童捐一点钱。
很多年里,这种模式运转得很好。这个编辑器传播到了世界每一个角落,捐款也持续流向那个村庄。直到有一天,地球另一端一位开发者提交了一个未被接受的补丁。这次拒绝,让这个由他独自守护多年的项目分裂成了两个。
这是关于地球上安装量最大的编辑器的故事;关于那个不愿让任何人掌握钥匙的工程师;以及关于那个清晨,那把钥匙突然不再属于任何人的故事。
1. 从 Amiga 到乌干达
1988 年,Bram Moolenaar 买了一台 Amiga 电脑。他曾在 Unix 上学习过 vi,希望在新机器上也能使用它。但 vi 尚未移植到 Amiga 平台,于是 Moolenaar 找到了当时最好的克隆版本,一个名为 Stevie 的程序,并开始不断改进它。
1991 年 11 月 2 日,第一个公开版本 1.14 发布,通过 Fred Fish Disk #591 发行。他将其命名为 “Vi IMitation”(模仿 vi)。1992 年发布 1.22 版时,名称改为 “Vi IMproved”(改进版 vi)。缩写则一直保留至今:Vim。
Moolenaar 于 1985 年毕业于荷兰代尔夫特理工大学(Delft University of Technology),获得电气工程学位。他是一位喜欢把事情做正确的荷兰工程师。Vim 体现了他这种性格:精确、可配置,并且对向后兼容性近乎固执。
1994 年,Moolenaar 前往乌干达基巴莱(Kibaale, Uganda),在一家儿童中心志愿担任供水与卫生工程师,那里照顾着许多因艾滋病失去父母的孤儿。随后他创立了 ICCF Holland(荷兰国际儿童关怀基金会),为该中心筹集资金。
Vim 因此变成了“慈善软件”(charityware):软件永久免费,但 Moolenaar 希望用户向 ICCF Holland 捐款。每次启动 Vim 时,屏幕上都会显示这条信息。数百万开发者都曾看到过它。某种意义上,一个文本编辑器资助着乌干达的一所孤儿院,就像一位街头艺人在世界最大的音乐厅演奏,却把所有小费投入了儿童募捐箱。

从 2006 年 7 月到 2021 年 9 月,Moolenaar 在 Google 苏黎世办公室工作,参与 Google Calendar 的开发。他的部分工作时间用于维护 Vim。Google 雇佣了这个世界上最重要的开发工具之一的创造者,而他的日常工作却是维护一个日历应用。
2. 那个被拒绝的补丁
2014 年 2 月,巴西开发者 Thiago de Arruda 向 Vim 提交了一个增加多线程支持的补丁。Moolenaar 拒绝了它。在他看来,这个补丁过于庞大、侵入性太强,不符合他一贯保守的变更理念。
于是,de Arruda 创建了 Vim 分支,取名为 Neovim。他非常清楚自己想做什么,计划是深入 Vim 源代码,把编辑器从内部彻底重建。那套代码凝聚了二十多年的积累,其中大部分由 Moolenaar 一人编写。用户熟悉的按键不会改变,但底层的一切都会焕然一新。
新的架构旨在实现 Vim 做不到的事情:允许其他程序嵌入并控制编辑器;用 Lua 取代老旧且古怪的 Vimscript;后台异步执行耗时任务,而不是卡死界面;在编辑器内部集成终端;通过 Language Server Protocol(LSP)理解代码,而不是让开发者自己拼装各种插件。
2014 年 3 月,de Arruda 在 Bountysource 上发起众筹,希望筹集 1 万美元,最终筹得超过 3.3 万美元。社区已经准备好接受那些 Moolenaar 不愿提供的东西。
Moolenaar 从未与之对抗。他依旧像往常一样维护 Vim,仿佛这次分叉与自己无关。但他一直在关注。当 Neovim 实现异步支持后,他最终也在 Vim 中加入了自己的实现;当 Neovim 证明 Lua 更适合作为扩展语言时,他则回应以自创的 Vim9 Script,一种速度更快的新语言。
于是,出现了两种编辑器、同一个血统。一个由不愿妥协的个人维护;一个由追求速度的社区维护。
3. 没有创造者的 Vim
2023 年 8 月 3 日,Bram Moolenaar 因病去世,享年 62 岁。两天后,他的家人在 Vim Google Group 公布了消息。葬礼于 8 月 16 日在他出生的荷兰小镇 Lisse 举行。
最紧迫的问题不是代码,而是权限。他是 Vim GitHub 账户唯一的所有者,只有他拥有分配维护者权限的能力。最终,他的家人修改了权限设置,使社区能够继续项目。长期贡献者 Christian Brabandt 成为了新的首席维护者。
2024 年 1 月,团队发布 Vim 9.1,并将该版本献给 Moolenaar。更新内容包括:虚拟文本增强、平滑滚动、OpenVMS 支持改进。随后,Brabandt 开始引入一些 Moolenaar 过去一直较为保守的改动:支持 XDG 基础目录规范,避免在用户主目录散落大量配置文件,也吸纳更多维护者加入项目。
Yegappan Lakshmanan、Dominique Pellé、Doug Kearns 等人成为了新的核心贡献者。Vim 从一个人的项目,变成了团队项目。这正是 Moolenaar 生前从未允许发生的事。
在 2024 年 11 月的 VimConf 上,Brabandt 发表《新的 Vim 项目》演讲,讲述社区如何在创始人离世后继续推动项目发展。2026 年 2 月 14 日,团队发布 Vim 9.2。新版本带来了实验性的 Wayland 支持、XDG 目录规范兼容、HiDPI 显示优化、新补全功能,以及改进的 diff 模式。
其中最具历史意味的是 Wayland 支持。X.Org 曾取代 XFree86;Wayland 正在取代 X.Org;而一个诞生于 1991 年的文本编辑器,也正在跟随显示系统进入下一代。项目仍在继续,每天都有新的 Pull Request 被审查,但 Vim 的气质已经改变。
4. 社区再次分裂
Bram Moolenaar 一生只面对过一次重大开发分歧,那就是 Neovim,争论的是速度与架构。2026 年 3 月,他身后的社区再次分裂。这一次争论的问题是:AI 生成的代码是否应该进入 Vim?
社区给出了三个不同答案。两个群体表示“不应该”,并分别创建了新的分支项目,目标是彻底排除 AI 生成代码。Vim 官方维护团队则给出了折中方案:允许,但必须披露来源。
2026 年 3 月 25 日,Drew DeVault 发表《A Eulogy for Vim(Vim 悼词)》一文,并宣布创建 Vim Classic。这是一个硬分叉项目,基于 Vim 8.2.0148,即 Vim9 Script 出现之前的最后一次提交。他写道:“在 Bram 去世几年后,我发现自己又经历了一种奇怪的哀悼,这次哀悼的是 Vim 本身。” 他又补充道:“我不想使用掺杂垃圾内容(slop)的软件。”
另一位维护者 NerdNextDoor 则在 Codeberg 上创建了 EVi。该项目基于 2024 年 1 月发布的 Vim 9.1.0,也是任何 AI 辅助提交进入上游之前的最后版本。其贡献指南直言不讳:“我们绝不会接受 AI 内容。”
官方 Vim 则选择中间道路。新的贡献指南新增了 “Using AI” 章节:如果开发者提交 AI 生成的代码,必须明确声明;同时,这些代码必须通过与其他补丁完全相同的风格检查。若未通过自动测试,人类维护者甚至不会看到它。
5. 被喜爱的程度超过了使用率
如今,Neovim 在 GitHub 上约有 10 万颗星,Vim 约有 4 万颗。分叉项目的关注度已经超过原项目两倍以上。
在 Stack Overflow 2024 开发者调查中,Neovim 的“赞赏率(Admired)”达到 83%,位居所有开发环境第一。2025 年,它连续第五年获得这一称号。约 14% 的开发者直接使用 Neovim;Vim 与 Neovim 合计覆盖了 38.3% 的开发者群体。
6. 他留下的东西
我一直在使用 Vim。我还记得 Neovim 刚诞生时,社区曾争论:创建 Vim 新分支是否对 Moolenaar 不尊重?答案是否定的。这是一个由单人维护、把稳定性置于速度之上的项目,必然会产生的结果。
Moolenaar 创建 Vim,只因为他想在自己的 Amiga 上使用 vi。他维护了 32 年,只因为人们依赖它。他把 Vim 变成慈善软件,只因为他亲眼见过乌干达那些比自己更需要帮助的孩子。
启动画面上的那句话至今仍在。每一次打开 Vim,它都会提醒你:请帮助乌干达基巴莱的孩子们。Bram Moolenaar 已经离开,但他的编辑器仍在,他的慈善事业仍在。
Neovim 证明了社区对于扩展性的判断是正确的。Vim 证明了 Moolenaar 对稳定性的坚持也是正确的。两个编辑器都在蓬勃发展。
Vim 的伟大不只是因为它改变了程序员写代码的方式,而是因为一个普通工程师在三十多年的时间里,同时创造了一个影响全球的软件项目和一项持续帮助乌干达孤儿的慈善事业。即使他已经离世,这两件事仍然在继续。
这就是 Vim,这就是开源,也是一个人一生所能留下的最珍贵的遗产。
参考资料
版权所有
版权归属:Guisong Wu