HomeAboutArchiveKnowledge BaseGraphPortfolioContactlive DONATE This website is supported entirely by the generosity of its audience. If you enjoy the ideas and inventions shared here, please consider giving back in the form of a donation. Any amount you gift is sincerely appreciated! Thank you. —l00sed ETHBTCVenmoPaypal

从 QED 到 Neovim

11:41AM March 9 2025 Daniel Tompkins

codeculture

5 2

目录

The Modern Text EditorTerminal-Based EditorsnvimHuman-Computer InteractionTurtles All the Way DownqededemenexvivimBram's DeathThe Legacy of Text EditingHonorable MentionsOther Modern Editors Archive

使用 *nix 系统的终端可能会让人感到 危险。如果你不知道自己在做什么,你可能会让系统陷入瘫痪。与此同时,终端也会带来一种难以置信的赋权感。它揭开了一层抽象,提供了一种直接发现和操作系统的方式。由于 *nix 无处不在,所以只要学习一次,你就可以在几乎任何地方实际使用它。

现代文本编辑器

大多数现代编程都需要一种精确选择、输入和排列文本的方法。自然地,这种工具应该成为程序员更广泛的创作和调试工具套件中不可或缺的一部分。

根据 Stack Overflow 的 2024 年开发者调查,Microsoft 的 Visual Studio Code 是首选的 IDE(集成开发环境)——被 73.6% 的受访者使用。它也是“最想要的”——被 58.7% 的受访者想要。然而,Neovim——一种现代的基于文本的编辑器——被评为“最受喜爱”(被 82.7% 的受访者喜爱)。

Screenshot from Stack Overflow survey, showing Neovim as admired by 82.7% of respondents— though VSCode is most preferred.Screenshot from Stack Overflow survey, showing Neovim as admired by 82.7% of respondents— though VSCode is most preferred.

基于终端的编辑器

基于文本的编辑器的一个巨大优势是它们能够在系统的终端模拟器中运行。每个现代系统都应该可以通过终端访问,因此可以用 UTF-8 字符呈现的文本编辑器几乎可以在任何系统上运行。

即使在无头环境中,终端模拟器也可以提供直接访问——在没有显示器的计算机或虚拟机 (VM) 上。某些系统(如云托管的网站)可能未连接到显示器;或者,它可能缺乏运行完整图形用户界面 (GUI) 所需的计算能力。

如果没有 GUI,使用 VSCode 进行编辑就不是一个可行的选择。

注意

对于本文精彩的视听附录,我强烈推荐 Linux User Space YouTube 频道的 Texted 系列。

nvim

Neovim(一种基于字符的文本编辑器)能够直接在终端内部运行。它于 2014 年从 Vim fork 出来,但仍然保留了与 Vim 的 编辑模型(命令、快捷方式和编辑“模式”)的兼容性。

然而,自从最初的 fork 以来,Neovim 还积极重构了 Vim 的大部分内容——演变为一个强大且高度可配置的替代方案。它可以在任何 *nix 主机(是的,还有 Windows)上使用,并且它提供了与 VSCode 相当的现代功能:

在过去的十年中,Neovim 在开发者社区中赢得了广泛的赞誉——甚至像其不朽的前身 Vim 一样,引发了同样的狂热崇拜。

人机交互

文本编辑器的同时代技术总是对人机交互 (HCI) 设定了合理的限制。在交互式显示器得到更广泛应用之前,计算机会在连续的纸张上标记其输出。在交互式输入设备出现之前,程序员会 tediously 准备一堆排序好的 punch cards,以此作为向机器提供指令的一种方式。

在 20 世纪 50 年代和 60 年代,“计算机科学”被确立为一门正式的学科——普渡大学实际上在 1962 年建立了第一个计算机科学系。交互式文本编辑——按下按键并立即在屏幕上看到它出现——直到 1976 年 才成为普遍的 HCI。为了控制讨论的范围,我将重点关注基于 Unix 的文本编辑器,这些编辑器与 Unix 操作系统(始于 1969 年)的历史相吻合。

层层嵌套

有许多有影响力的编辑器塑造了软件工程领域。坦率地说,我是 Neovim 教派 的一名信徒。作为它的虔诚追随者,本文是对编辑器的起源的冥想,供好奇和虔诚的读者参考。

为了构建上下文并提供一些文化见解,我试图编录一些围绕创建最具影响力的终端编辑器的人员和对话(甚至旧手册)。

你可能会看到一段软件归功于单个贡献者,但个人完全孤立地创造某些东西——而不建立在其他人的基础上——是很少见的。根据我的经验(并且在历史上),软件是衍生的、迭代的和协作的。

同样,Neovim 也不是凭空出现的——它是 Vim(特别是版本 7)的一个 fork。Vim 本身就是 vi 文本编辑器的演变。vi 编辑器从 ex 中演变而来。并且有一个清晰的演变,可以追溯到第一个 Unix 图形终端编辑器——ed

qed

ed 之前,我们将再往前退一步——到 qed(或 QED——代表“quick editor”)。QED 由 L. Peter DeutschButler Lampson 于 20 世纪 60 年代后期(大约 1967 年)在伯克利构思。 Dana Angluincomputational learning theory 的研究被认为是现代机器学习的基础,她也 contributed to an initial implementation

QED 在伯克利分时系统上使用——在 SDS-940 上。它主要在 Teletype 输入上运行——CRT 显示器未在其设计中考虑。

通过电传打字机发推文

查看 CuriousMarcvideo,他使用电传打字机终端发送推文。

Unix 的起源可以追溯到 20 世纪 60 年代中期,当时麻省理工学院、贝尔实验室和通用电气正在开发 Multics,这是一个用于 GE 645 大型计算机的分时操作系统1

名称“Unics”实际上是 pun on the "Multics" name。QED 将继续在 Multics 中使用——我甚至找到了 a manual from 1983Bob Daley 编写的后来 qedx 实现。

ed

Ken Thompson 在来到 AT&T Bell Labs 之前在伯克利使用了 QED。抵达贝尔实验室后,Ken Thompson 编写了一个改进的 QED 版本——带有 regular expression 模式匹配——用于 MIT CTSS (Compatible Time-Sharing System)Assembly 语言中。CTSS 在贝尔实验室被用作他们参与 Multics 项目的一部分——该项目于 1969 年退出。

Ken 的 CTSS qed(从伯克利那个)采用了多个缓冲区同时编辑多个文件并在它们之间移动和复制文本的概念……还有将给定缓冲区作为编辑器命令执行的想法,从而提供可编程性。(TECO,它发展成为 Emacs,大约是同时代或稍晚一些,并独立地阐述了这些想法)。2

在贝尔实验室,Ken 和 Dennis RitchieC programming language 的创建者)构思了一个简化的操作系统——确信当前的模型过于复杂。简而言之,他们确定新系统需要三个基本要素:

  1. 汇编器
  2. Shell
  3. 编辑器

ed 文本编辑器是 editor 的缩写,但发音为不同的字符(ee dee),成为了 Unix 系统的专用(行模式)文本编辑器。 ed 文本编辑器后来会被包含在 POSIX 标准中,事实上,今天仍然存在。如果你使用的是 Apple 计算机,请尝试打开终端并输入 man ed

em

1975 年秋天,在伦敦,Peter Salus 在 Queen Mary College(现在是 Queen Mary University——英国第一个获得 Unix 的站点)开发了 em(“editor for mortals”)。它是 ed 的扩展/升级,它将终端模式设置为“raw”——允许单个字符在键入时被读取。这允许在单行中进行可视编辑,方法是在每次更改后发送一个 RETURN 字符,然后发送该行的新版本。3

en

Bill Joy——Sun Microsystems 的联合创始人兼 vi 编辑器的作者——在 Unix 历史的弧线中描述了另一个被遗弃的编辑器。在 1984 年 8 月版的 Unix Review 的一次采访中:

所以 Chuck (Charles Haley) 和我看了看,我们在 em 上 hack 了一段时间,最终我们从 em 中提取了一些东西,并将其中一些东西放到了当时称为 en 的东西中,实际上是 ed 加上一些 em 功能……我会破坏编辑器,他会修复它,然后他会破坏它,我会修复它。我非常热衷于编写手册页,所以我为我们将要做但从未实现的所有伟大功能编写了手册页。4

ex

Peter Salus 于 1976 年将他的 em 程序介绍给了 Bill Joy——在 U.C. Berkley 的计算机科学系度过了夏天。

Bill 以我的代码为起点,并且在很大程度上接近了将成为“ex”,然后是“vi”的东西……

vi

Vi 最初由 Bill Joy 于 1976 年为 Unix 操作系统创建,作为早期文本编辑器 exextended 的缩写)的“visual”模式。“Visual”意味着它可以跨多行使用,与 ex 的面向行的编辑功能相比。虽然,一开始,viex 是同一个程序的接口,甚至可以在编辑会话期间来回切换。

使用 Stevie 源代码允许该程序被分发。以前,vi 源代码必须由 AT&T 许可。Andrews 实现的开源端口由 Bram Moolenaar 修改——最终成为 Vim(或“Vi IMitation”)。

vim

Moolenaar 将在接下来的几年里继续在 Vim 上工作(在 Amiga 上)——并在 1991 年首次公开发布。VIM 首字母缩略词将被定义为“Vi IMproved”(而不是 IMitation),因为它开始在基本 vi 实现之上添加功能。1992 年,Vim 被移植到 Unix,并引入了多个窗口、语法高亮、折叠和一个 GUI。8

像 vi 一样,vim 支持多种编辑模式。根据模式,键入的字符被解释为命令序列或作为文本插入。在 Vim 中有 14 种编辑模式,7 种基本模式和 7 种变体

Normal 模式允许你导航访问工作文档——或 Vim 术语中的“buffer”。Insert 模式允许你像在常见的 GUI 文本编辑器(如 Google Docs、MS Word 或 Notepad)中一样键入。Command 模式允许你运行正则表达式、shell 命令或 Vim 特定的命令。Visual 模式是一种可视化选择模式——类似于在 GUI 上突出显示文本,但也可以选择垂直列。老实说,我很少使用其他 10 种模式。9

Vi(及其扩展 Vim)倾向于允许打字员将手指放在主行上,这对于触摸打字员来说可能是一个优势。

有趣的是,vi 主要在 ADM-3A 上实现。该终端没有专用的箭头键。相反,它使用 h j k l 键进行导航(分别为左、下、上、右)。10

A figure of the keyboard layout from the ADM-3A terminal manual. You can see the <code>h j k l</code> keys printed with arrows— the origins of <code>vi</code>'s home row navigation.A figure of the keyboard layout from the ADM-3A terminal manual. You can see the h j k l keys printed with arrows— the origins of vi's home row navigation.

Vi/Vim/Neovim 的一个常见诱惑力是能够无缝导航,无需鼠标——也无需伸手去拿箭头键。在 Vi 和 Emacs 用户之间轻松愉快的文化战争中,一个共同的主题是 Emacs 用户患有腕管综合征,因为他们被迫使用所有修饰键组合来完成各种编辑操作。Vi 的多模式切换 确实 允许相对简单的快捷方式——根据其活动模式提供完全不同的效果。

Bram 的去世

Vim 永远与它的创造者 Bram 联系在一起。Bram 是 Vim 一切事物的仁慈独裁者。他因不允许许多请求的更改合并到存储库中而享有盛誉——这有时可能是周到代码管理的标志。然而,正是这种严格性(以及对 VimScript — Vim 脚本语言的普遍厌恶)最终煽动了 Neovim 的创建。

Bram 也是一位慈善家。他通过 ICCF Holland(他创立并担任财务主管)将 Vim 与慈善软件许可联系起来——将其专门用于乌干达艾滋病孤儿。Bram 在 2020 年分享的一份报告显示,在 2011 年至 2019 年间,Vim 每年赚取超过 5 万欧元。2019 年,它为慈善机构赚取了近 8 万欧元!11

当 Bram 去世的消息在 2023 年 8 月传开时,许多程序员深感悲痛。新的 Vim 维护者 Christian Brabandt 写下了他在 Vim after Bram 中的经历——以及接管代码的后勤工作。

在撰写本文时,Hacker News 上关于 Bram 去世的 Hacker News 文章在所有时间的热度排名中排名第 7。排名第一的帖子是 Stephen Hawking 的讣告,排名第 6 的是 Steve Jobs 的讣告。我并不是想通过使用社交媒体指标来比较人们的价值而不敏感——但 Bram(和 Vim)显然在广大科技社区的心中与巨人并列。

文本编辑的遗产

虽然我试图提供 Unix 文本编辑的详细历史——但这实际上只是冰山一角。在计算机的早期,有许多才华横溢的计算机科学家、大型机和过时的终端相互交织。

我希望读者花一些时间探索我收集的资源,并可以纠正我在研究过程中可能犯的任何错误。

一个电视节目深入探讨了 Unix 操作系统,其中包含对 Ken Thompson、Dennis Ritchie 和贝尔实验室的其他早期贡献者的采访。

值得一提

这些是在与上述文章中讨论的时间线并行开发的其他值得注意的文本编辑器。它们可能对 Neovim 的血统没有相同的影响——但阅读起来仍然很有趣。

其他现代编辑器

Kakoune

Kakoune 是一个代码编辑器,它实现了 Vi 的“key strokes as a text editing language”模型。由于它也是一个模式编辑器,因此它在某种程度上类似于 Vim 编辑器(最初 Kakoune 受其启发)。

Helix

通过从头开始,我们能够从我们使用 Vim 的经验中学习并做出一些重大改变。结果是一个小得多的代码库和一套现代默认值。如果你以前从未使用过模式编辑器,那么入门会更容易,并且配置文件的修改也少得多。

脚注

  1. [https://​en.wikipedia.org/​wiki/​Unix#His­tory:~:text=The%20o­ri­gins%20of%20Unix%20­date%20back%20to%20the%20mid%2D1960s%20when%20the%20­Mass­a­chu­setts%20In­sti­tute%20of%20Tech­nology%2C%20­Bell%20Labs%2C%20and%20­Gen­eral%20­Elec­tric%20were%20de­vel­oping%20­Mul­tics%2C%20a%20­time%2D­sharing%20­op­er­ating%20system%20for%20the%20GE%20645%20­main­frame%20­com­puter](https://l-o-o-s-e-d.net/<https:/en.wikipedia.org/wiki/Unix#History:~:text=The%20origins%20of%20Unix%20date%20back%20to%20the%20mid%2D1960s%20when%20the%20Massachusetts%20Institute%20of%20Technology%2C%20Bell%20Labs%2C%20and%20General%20Electric%20were%20developing%20Multics%2C%20a%20time%2Dsharing%20operating%20system%20for%20the%20GE%20645%20mainframe%2