vi
Source: Dev.to
人气
270 万人访问过 Stack Overflow 学习如何退出文本编辑器——相当于每 20 000 名访客中就有一位。在高峰时段,大约每小时有 80 人发现自己被意外打开的程序困住。
设计约束
计算机领域中最令人畏惧的工具也是最优雅的。比尔·乔伊(Bill Joy)当时是伯克利的研究生,使用 300 波特调制解调器在 ADM‑3A 终端上编写代码。屏幕重绘的速度慢得比他思考的速度还慢;每一次按键都要耗时,每一个多余的字符都会导致可见的延迟。
为了解决这些约束,乔伊构建了一个“毫不浪费”的编辑器:
- 没有菜单。
- 没有鼠标。
- 没有装饰。
- 每个键都有作用。
Escape 键现在位于 Tab 键所在的位置,因为在 ADM‑3A 上它只需动一根手指即可到达。hjkl 用来导航是因为 ADM‑3A 在这些键上印有箭头。: 进入命令模式是因为在那种键盘上输入冒号不需要 Shift。
Vi 并不是为舒适而设计的;它是为 300 波特调制解调器而设计的。这一约束孕育了定义编辑器的语法。
命令语法
Vi 不仅仅是一个编辑器,它是一种语言。
d3w # delete three words
ciw # change inner word
yy # yank (copy) this line
p # put (paste) it back每个命令由一个 动词、一个可选的 计数 和一个 名词 组成。学会 10 个动词和 10 个名词,你就拥有 100 条命令;学会各 20 个,你就拥有 400 条。
没有其他编辑器是这样工作的。大多数编辑器将操作映射到固定的键组合(例如 Ctrl+C、Ctrl+V、Ctrl+Shift+K),这些绑定需要记忆,而不是理解。Vi 给你一套语法,让你能够写出以前从未写过的句子。
一个三岁的小孩可以用动词和名词组合句子,而不必记住每一种可能的组合——这正是 vi 的工作方式。语言学家大概会赞同。
遗产与影响
Vi 已在 POSIX 中规范,并随每个 Unix 系统一起发布:每台 BSD 服务器、每个 Linux 发行版以及每台 macOS 机器。它自 1976 年起就存在——已有五十年的生产历史。
Bram Moolenaar 在 1991 年基于 vi 构建了 Vim。他维护了 32 年,创造了 “charityware” 这一概念,并呼吁用户向乌干达的孤儿捐款,而不是为软件付费。他于 2023 年 8 月 3 日去世,享年 62 岁。他所构建的编辑器运行在的机器数量,超过了历史上任何其他文本编辑器。
- Vim:约 38 万行 C 代码。
- VS Code:Electron、Chromium、Node.js,数百兆字节。
两者都用于编辑文本,但 1976 年的约束产生了一套编辑语法,现代编辑器尚未匹配——不是因为缺少功能,而是因为缺少一种语言。
Vi 是一个 50 年历史的证明:为约束而设计的工具,往往能够超越约束本身,长久存在。