查看原文
其他

致 Vim 和青春

池建强 MacTalk 2023-10-21
上周,Vim 文本编辑器作者 Bram Moolenaar 因病离世,享年 62 岁,让人扼腕叹息。又一位优秀的、世界级的程序员离开了我们。
Bram Moolenaar 是一个牛人。一手创造的 Vim 已经深深改变了很多程序员的工作方式。我近乎疯狂地喜欢 Vim,认为它是世界上最高效的编辑器,还写过无数文字推荐这个神器。
我始终固执地认为,如果一个程序员愿意花点时间掌握 Vim,那他就再也回不去了。他会被 Vim 的简单和高效所折服,会沉浸在 Vim 带来的那种创造感中流连忘返,一点都不夸张,这就是 Vim 的魅力。
Bram Moolenaar 是一个热忱的人。自 1988 年基于 Vi 开发 Vim 以来,Bram Moolenaar 把自己人生中的大部分时间都奉献给了这个他深爱的工具,在一次采访中,他这样说道:“我一个人生活,这样我就不必供养一个家庭。你知道,养一个家庭会很难,因为我做的大部分工作没有报酬。”
2008 年,因为在自由软件及 Vim 的贡献,他获得了 NLUUG 奖。我们无法评价 Bram Moolenaar 的这种选择到底是对还是错,但无可否认,他为 Vim 付出了很多很多,Vim 早已是他生活中重要的一个组成部分。
Bram Moolenaar 还是一位善良的人。曾经有段时间,我不知道为什么在 Vim 启动页中会有这么一句话:“帮助乌干达的可怜儿童”。后来检索之后才明白,Bram 一直在做慈善。每年通过 Vim 筹集大约 3 万欧元的善款,帮助了大约 50 个孩子完成他们从小学到大学的教育。
让人倾佩不已。
Bram Moolenaar 已经离我们而去,Vim 却会永存。我想,往后某天可能有这样的场景:深夜里,你拖着疲惫的身躯,在电脑前噼里啪啦敲写着代码。无意中,在命令行中键入 Vim,Bram Moolenaar 的名字出现在眼前。你不由自主地想起那个富有创造力、饱含热忱的荷兰程序员,会心一笑。

写 Vim 的人

自诩为一个编程“手艺人”,Bram Moolenaar 的第一手资料不多,我们找到一篇 2022 年对他的采访,从中可以窥见他对 Vim、软件开发、效率、生活的看法。我同事整理了其中的精彩内容,分享给你。
问:回顾过去,从事 Vim 工作对你个人来说意味着什么?
Bram:我一直喜欢创造。但很多时候,做出了某个东西,我并不知道如何处理。有了 Vim,我不仅可以自己用,而且通过公开出去,很多人都可以用。所以,Vim 让我出名的同时,也间接为我找到了一份工作。现在,我已经退休了,Vim 让我有机会做一些有趣、快乐、有用的事情。Vim 是我生活中非常重要的一部分。
问:您认为软件开发更接近艺术还是科学?
Bram:软件开发不是科学。科学,意味着有证据证明某件事是正确的。在软件领域,有很多观点,也有很多经验,但是,有任何证据能说明一种编程语言比另一种更好吗?能说明面向对象编程可以提高生产力吗?大多数证据都是测量性能的,有统计数据,但与程序是用什么语言编写的,或使用什么工具几乎没有任何关系。
但软件开发也不是艺术。因为开发的主要目标是让软件运行良好,而不是看起来漂亮。
软件开发更像是一门手艺。工匠会使用他认为能获得最佳效果的任何工具,无论这些工具是其他人都在用的还是独一无二的。一个好的工匠,会在需要时自己制作工具。 
问:打开 Vim,首先能看到的就是帮助生活在乌干达儿童的慈善项目。您是如何想到用 Careware / Charityware 许可模式来授权 Vim 的?有多少人可以通过这种方式捐赠?
Bram:Vim 最初就是一种爱好,而且大多数时候,我都有一份工资足够高的工作。所以,除了我要求捐款的那几年,我从来没想过从 Vim 赚钱。
尽管加了捐款,还是有不少人表示他们觉得 Vim 有价值。所以,我决定把帮助贫困儿童的愿望和捐款结合起来,Charityware 就诞生了。效果很好,每年,能筹集约 3 万欧元,帮助约 50 名儿童完成从小学到大学的学业。这些捐款来自一些大赞助商和许多小额捐款。
问:尽管 Vim 灵活性和功能性都很好,但它并不是一个符合直觉的编辑器,入门门槛相当高。如果有人想有效地使用 Vim,要花相当多的时间学习控制命令。为什么会采用这种方式,而不是引入一些逐渐增加复杂性的“初学者友好”模式?
Bram:实际上,Vim 有一种大家不太了解的模式,可以在不知道所有命令的情况下直接输入,就是“Easy Vim”,或 evim。但这个模式用得不多。因为一旦你听过 Vim 和所有强大的命令,为什么还会在 Vim 上用像任何其他编辑器一样工作的模式呢?
显然,Vim 和 Vi 一样,你需要学习用法。对我自己来说,当年,我大学的实践课只有一台特定的计算机,唯一的编辑器就是 Vi,我或多或少是被迫学习的。在向老师吐槽之后,解决方案是给了我们一张命令备忘录……如果没有被强制学习,我可能永远不会跨出那一步,去学习和使用 Vi,历史的进程可能也会大不相同。
问:近年来,开发者经常用其他人的某段代码来帮自己解决问题,而不是从 0 开始写自己的代码。导致一些应用程序,虽然能满足开发的 DDL,但看起来像拼接怪弗兰肯斯坦。您觉得这种做法可以接受吗?
Bram:这种情况,通常发生在一些对软件没有深入了解的人,写软件的时候。我曾经在一家公司工作,那里有不少接受过物理和工程教育的管理者,他们认为做软件,就像他们所知道的一样,可以自己决定如何制作。那家公司后来破产了。一旦,制作软件的决策者觉得自己可以摆脱失败后果,类似情况就会经常发生,比如政府。
一些写代码的人,可能只确保能拿到工资,然后逃之夭夭。天平的另一端是那些想要编写漂亮代码的人,他们花大量时间,并且不关心是否真正实现了预期目的或预算。这两个极端之间,存在着一种平衡。
问:Vim 官网的社区频道是 IRC,如今并不流行,一些人甚至从未听说过。您是否计划改成现在更常用的 Slack 或 Discord,让 Vim 社区更活跃,带来更大的影响?
Bram:我是一个老派的人,主要沟通方式是电子邮件。这不仅是因为我已经习惯了,而且还因为邮件不会打扰我,我可以在需要的时候阅读和回复消息,在不想被打扰的时候推迟阅读和回复。当然,用户可以自由选择适合他们的任何工具,其他人可以协作。不过,类似聊天的交流,通常会有很多噪音。
问:现在有很多很棒的插件扩展 Vim 的强大功能。您有什么可以推荐给我们的最爱和必备插件吗?
Bram:我必须承认,除了发行版中包含的插件(例如 matchit 和 termdebug)之外,我没有使用很多插件。当我需要某些东西时,我倾向于要么快速修改,要么将其添加到 Vim 库中。这就是创造者的奢侈:-)
问:鉴于您丰富的开发经验,能否为开发者们分享一些技巧如何提效,如何保持生产力?
Bram:没有技巧,只有一些基本规则和建议。
我见过很多年轻人会在头一天工作到很晚,第二天很晚才重新开始工作。但大多数人,在早上的工作效率最高,所以,最好对自己停止干活的时间,设置严格的限制。也许可以记下你做到哪了,然后放松一下,睡个好觉,第二天早上继续。很多时候,你会对自己昨天的问题有新的见解,知道该怎么做了。“sleep on it”,把问题先放一放,确实有效,至少对我来说是这样。
另一件事是,有时你需要的不是一些聪明的解决方案或无休止的配置调整,只是打字,快速打字。Vim 中的录制宏功能,可以重复完成某件事 200 次。为此编写一个插件,需要多少时间?

Vim 和青春

工作十几年来我用过各种编程工具,用错过,也用对过,每种优秀的编辑器都有传奇的故事,每个程序员都有自己的脾气。在文本编辑器领域,Vim 和 Emacs 是早年争论的永恒焦点。我还调侃:
Emacs 和 Vim 开发者,大家沿着不同的道路和目标前进,但总是会在某个点交叉相遇,见面就扔石头和臭鸡蛋,砸得对方鼻青脸肿,然后擦擦眼泪和口水继续前行。
但无人能否认 Vim 的江湖地位。
在无数的编程工具里,Vim 独树一帜,历久弥新。可以说,Vim 是最简朴的编辑器,也可以说,Vim 是最繁复的编程工具,还可以说,Vim 是一款史诗般的编程软件。
回想早年用 Vim 编程的场景,当可体现“专注”二字。那个年月的网络没有这么多诱惑,编写代码时差不多只开一个终端工具,噼噼啪啪地敲击键盘,累了就躺在办公室外的沙发上休息,也可以站起身看看窗外,舒缓一下疲惫涣散的眼光,车流尚慢,夕阳正好。
时过境迁,现在靠着硬盘的快、内存的大,我常常同时开几十个程序,用 command+tab 一切,屏幕中央一排几毫米见方的小图标一字排开,看着它们我有时候茫然若失,不知道自己到底想点开哪个,估计它们看着我也郁闷,「这孙子把我们都打开想干什么?」环境变好,硬件充沛,软件强劲,我们的效率好像并没有随之提高。
而 Vim,正是为效率而生的。我和这个神器的结缘,得从 2000 年说起。
结缘
20 年前,正值第一波互联网浪潮。
我刚毕业不久,一如现在的热血青年,投身到互联网的大熔炉中。我所在的公司叫洪恩教育,公司里聚集了很多清华北大的同学,技术牛人扎堆,大家清一色使用 Vim 在服务器端编程,语法高亮都不设,内部 BBS 也是水木清华那种,通过终端访问,非常极客。走进办公室一眼望去,满目皆是黑漆漆的屏,绿瓦瓦的字,每个人都在那里噼噼啪啪的敲击键盘,韵律十足,我想,这简直酷毙了。
你看,水木清华也是一种生活方式。
我最初还在使用 Editplus 编程,隶属菜鸟帮。别人的开发、编译和发布环境都在服务器端,而我则需要在本地编写好程序,通过 Editplus 的 ftp 功能上传到服务器端,再进行调试、测试和发布,不仅麻烦,而且不够酷。
那时候,不酷是不行的。
有一次我的师兄站在我电脑旁边看我完成了上传、编译和执行的全过程,像看一个怪物一样对我说,你这是干啥哩?给我推荐了 Vim 这个神器。
由于我的菜鸟行为遭到了小伙伴的无情嘲讽,于是我把愤怒都发泄在键盘上,每天在满天星斗的夜色中学习 Vim 技法,在清晨的微光中编译 Linux 内核,上午敲打键盘输出 Perl 程序,中午吃完五又四分之一口米饭之后开始研习 Vim 的多窗口和标签……
等我掌握了 Vim 的使用方法和十几个快捷键之后,每次编程双手上下翻飞,再也没有上传的事,连编译执行都不用离开 Vim,我彻底喜欢上了这个编辑器,再也回不到用 EditPlus 写东西的世界。
到了 2009 年,我开始把工作环境完全切换到了 Mac 上,记得当时打开 Mac 的终端时,欣喜若狂地想,这不就是 Vim、Shell 和 IDE 的完美集成么?十几年过去了,我在工作中一直没有离开过 Vim,一直用到现在。

神器

Vim,作为一款完全面向程序员的软件,优点和缺点同样明显,某种程度上,优点就是它的缺点。
写过程序的人都知道,编程的时候,双手大部分时间都放在键盘上,或编码、或插入、或移动、或定位、或查找,这种连续操作的时间和频率远远大于阅读、翻页、设置字体、摆弄样式等文案工作,而二者往往产生很多停顿和间隙。
编程时的停顿,是非常影响编程效率的。所以 Vim 的设计理念就是通过模式的转换、命令的组合和数以万计的插件,保证程序员在编程的过程中,双手尽可能保留在键盘中央的区域,并且,不需要鼠标。
所以,Vim 的模式和普通的编辑器有所不同,命令繁多千变万化,初期的学习曲线较高。我还对比过 Vim 和 Emacs 的学习曲线:
Vim 的曲线异常陡峭,但是当你度过了那一段艰难时候,就会领略到千帆竞发、百舸争流的美妙,并且从此天堑变通途。Emacs 则是初期似乎不过尔尔,但是学习愈深愈艰,而且还会出现回退,反复,360 度大回环等匪夷所思的情况,到最后你终于明白,Emacs 原来是个伪装成编辑器的操作系统,满眼都是泪!
学 Vim 最常见的笑话就是,在命令行输入 vim,然后就永远退不出去了……最后只好关上整个终端。因为退出 vim 的命令是 :q
但是一旦你坚持练习并且度过了最早的平台期,就会领略 Vim 的妙和全键盘的好。唯快不破,这个词用来形容 Vim 最合适不过。毕竟,工具之间确实存在优劣和效率上的差异。
想做到快如闪电,就需要记住四种模式切换:普通模式、插入模式、可视模式、命令模式,大量的快捷键和命令,想通过死记硬背记住这些东西是不现实的,唯有长期坚持不懈的练习和使用,才能达到随心所欲的地步,就像乔峰一般,任何平坦无奇的武功到了他的手里,均可化腐朽为神奇。
在不同的场景下,采用最合适的工具,永远是最佳选择。如此强大的 Vim 适合什么场景呢?
简单说来,Vim 比较适合 Unix/Linux 服务器端编程,如果你使用 Mac 电脑,Vim 是直接集成在你的终端环境中的,用起来十分方便。我以前用 Vim 主要用来进行 Shell/Python/C 编程。在 Unix/Linux 服务器端编辑和修改文件也离不开 Vim,另外由于我个人工作环境是 Mac,所以修改文本文件、Code Reiview、批量替换文件、比对文件等工作,用 Vim 顺手就做了。
写 Java 程序、前端的 HTML/CSS/JS、Objective-C 和 Swift,最优方案依次是 IDEA、VS Code、XCode 等。
这些优秀的工具可以帮助我们提升效率,减少错误,但是如果你还想更进一步,那么 Vim 绝对值得拥有。事实上,这些编辑器内部全部内置了 Vim 编程模式,或者有  Vim 插件扩展。可谓一通百通。
不过编辑器历史久远,这些年产品不知凡几,为什么 Vim 如此风靡?
因为它的创造者是Bram Moolenaar 。

诞生

Vim 源于 Vi,但不是 Vi。
Vi 作为计算机的文本编辑器历史极为悠远,它是由美国计算机科学家比尔·乔伊编写并于 1976 年发布的,同年苹果公司成立。比尔·乔伊,是 Sun 公司的联合创始人和首席科学家,一位传奇的技术天才,我个人以为,他最伟大的贡献是独立编写 BSD 操作系统,开发 Vi 编辑器,创立 Sun 公司。
当然,他还是 Java 语言的主要贡献者之一。任何人有幸完成其中一项工作已经足以名垂计算机发展史,而比尔·乔伊则通过一己之力完成了这些科技成果,推动了整个计算机科技的发展。
在 1984 年 Emacs 出现之前,Vi 是所有程序员的标准 Unix 编辑器。
比尔·乔伊自己也点评过 Vi 和 Emacs:“我觉得 Vi 一个最有趣的特点是它是一款基于模式的编辑器,作为一款基于模式的编辑器,Vi 做的非常棒。Emacs 的优点之一是,它是一款无模式的编辑器。但我从来没有想过要把 Vi 做成那样。Vi 最根本问题是它没有鼠标,所以才有了各式各样的命令,但你不能用现在的眼光去看当时的软件。对于 Vi,我希望,我们没有用尽键盘上的每一个键。
Vim 的诞生要晚一些。
第一个版本由 Bram Moolenaar 在 1991 年发布。作为一位声名显赫的程序员,80 年代,他买了一台 Amiga 2000 电脑,打开电脑一看,鼻子差点气歪了,居然没有他在 Unix 系统上最常用的 Vi 编辑器!这是不可接受的。愤怒的Bram决定自己开发一个文本编辑器,完全复制 Vi 的功能,并起名为 Vi IMitation(模拟)。
事实证明,天才程序员都具备这种能力,对现实不满意,就会写个东西出来,要么完善一下,要么创新一下,要么是你写,要么是我写,于是,很多伟大的软件程序就发明出来了。
随着 Vim 的不断发展,更多更好的功能被加了进来,正式名称改成了 Vi IMproved(增强),也就形成了我们所熟知的现代的 Vim。
其实还有一个小插曲,90 年代,Bram发布自己开发出的 Vi 模拟后,市面上也有不少人发布了自己 Vi 克隆编辑器,比如 Elvis、Nvi、Xvi。最终 Vim 脱颖而出。
到底有多优秀,同行评价是最客观的。有人就问过 Xvi 的开发者,既然自己写了一个编辑器 Xvi,为什么还要使用 Vim?
回答是这样的:“写一个 vi 是任何程序员都可以做的事情,只要他们付出努力。但把 vi 写成像 Vim 这样的好东西,只有像Bram这样的人才能做到。显然,我会用更好的工具。
Bram的个人网站有一个专题“FUN”,https://moolenaar.net/fortunes.txt,他收集了一些“有趣的、有智慧的或值得一读的言论”,其中一条是:Emacs 和 Vi 之间的战争已经结束。Vi 以 3 比 1 获胜。
推荐阅读:
用 Vim 吗?退不出来那种
Vim 学习卡和提鞋的问题(上)
Vim 学习卡和提鞋的问题(下)
VIM——为效率而生

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存