IDE怀旧 (2022)
摘要
大卫·梅纳德反思了1970年代NLS代码编辑器的效率,该编辑器使用鼠标和键组实现流畅编辑,并质疑现代IDE的对比效果。
暂无内容
查看缓存全文
缓存时间: 2026/08/19 22:11
# IDE怀旧情结 | David Maynard
来源:https://davidsmaynard.com/blog/keyset
## 一个让50岁集成开发环境(IDE)重焕生机的150年古老设备
Engelbart键盘:单手和弦键盘
Engelbart键盘:单手和弦键盘
*照片由计算机历史博物馆提供,© Mark Richards*
我编程已超过五十年。现已退休,但仍乐于编程和学习。我曾在大型机、8位CPU、家用电脑、服务器、移动设备和现代开发笔记本上编写程序,专业使用过三十余种编程语言。五十年前,我曾使用过至今所见最流畅的代码编辑器之一——那是1972年加州门洛帕克斯坦福研究所道格·恩格尔巴特增强研究中心的NLS(在线系统)。该系统运行在配备1MB内存(物理+虚拟)的1MHz PDP-10计算机上。一个五十年前的软件系统何以能在诸多方面超越今日工具,成为更快更高效的代码编辑器?这正得益于道格·恩格尔巴特及其团队构建的高性能用户界面所体现的远见卓识。
实现这种性能的关键创新之一在于同时使用鼠标和键盘控制界面。道格与威廉·K·英格利希共同发明了鼠标,并重新设计了键盘。SRI为两者都申请了专利:鼠标获得专利后,却发现键盘早在1860年代就已作为电报输入设备获得专利。这个五键键盘让用户通过按键或和弦组合向模态界面输入命令:"c"代表复制,"d"代表删除,"i"代表插入等。
键盘本非为替代传统键盘而设计,因为用双手在键盘上输入连续文本显然更快。触键者通过肌肉记忆最小化文本输入所需的心理专注度。在鼠标操作中使用键盘和弦技术,能为简单编辑、短命令输入和超链接信息空间探索建立同样的肌肉记忆。用户视线始终无需离开动态信息视图。NLS甚至用于编辑自身的超链接源代码——早在1960年代就开创了软件自举技术。NLS证明了单手键盘单手鼠标的文本编辑具有惊人效率。
NLS作为代码编辑器的高效性主要体现在以下方面:
- **一致的“动词>名词”命令结构:**
- *动词:*复制、插入、删除、跳转、转换等
- *名词:*词语、语句、分支、链接、分组等
- **键盘:**输入命令动词(和弦键"c"代表复制,然后"s"代表语句,或"j"代表跳转,"l"代表链接)
- **鼠标:**指向名词和目标位置
- 选择次数由命令类型决定:
- *复制*需要两次选择(源和目标)
- *删除*和*跳转*只需单击一次
- 选择方式根据名词类型优化:
- *分支*和*链接*单击一次
- *文本*和*分组*双击两次
- **严格层级化的文件系统**
- **视图规范:**通过键盘命令即时折叠、过滤和展开文件层级视图。
作为NLS系统程序员,我用它探索和编辑源文件。道格坚信自举理念,因此最初被NLS增强的“知识工作者”正是开发该系统的程序员。
1968年NLS的键盘与鼠标
*图片由SRI International提供 © SRI International*
使用这套设备,我无需触碰传统键盘即可探索全部NLS源代码及其互联关系。当条件合适——即深夜PDP-10负载低于2时——在信息空间穿梭近乎魔法体验。仿佛文本与显示屏之间的滑动摩擦系数为零。
例如要为系统添加新命令,我会先找到与目标命令最相似的现有命令源码。通过视图规范过滤文件视图:按住鼠标按钮的同时在键盘输入和弦组合,视图规范"x"仅显示层级顶层且每个语句只显示一行,这样就能立即看到文件中所有过程的提纲列表。找到目标过程后,用键盘和弦输入"cb"(“复制分支”)。命令反馈提示“复制分支自:”——选择过程后提示变为“至:”,点击目标位置。最后提示“确认?”单击即完成复制。
接着用键盘和弦输入"rw"(“替换词语”),点击新复制分支中的过程名称,输入新命令名。整个过程耗时不足两秒,且视线始终未离开代码。无需将鼠标移至菜单栏或上下文菜单,这种专注状态能让工程师更长时间保持“心流”。
## NLS视图规范命令:动态视图与大纲控制
视图规范是NLS/AUGMENT中的单字符显示控制参数,允许用户在不修改文件内容的情况下,即时改变文本与层级的过滤、格式化和层级裁剪方式。
在NLS中,同时按住鼠标按钮组合并在五键键盘输入和弦,相当于切换状态:
- **状态0(`000`鼠标按钮):**小写字母(标准视图规范命令)
- **状态1(`010`鼠标按钮):**大写字母
- **状态2(`100`鼠标按钮):**数字与特殊字符
- **状态3(`110`鼠标按钮):**视图规范扩展
以下是完整的NLS视图规范对照表,展示五键和弦组合(`X`=按下键,`0`=未按)、鼠标按钮状态及其对应显示操作:
| 五键和弦 | 状态0(`000`) | 状态1(`010`) | 状态2(`100`) | 视图规范操作/描述 |
|----------|----------------|----------------|----------------|-------------------|
| `0 0 0 0 X` | a | A | ! | 显示少一级内容 |
| `0 0 0 X 0` | b | B | " | 显示更深一级内容 |
| `0 0 0 X X` | c | C | # | 显示所有层级 |
| `0 0 X 0 0` | d | D | $ | 仅显示顶层 |
| `0 0 X 0 X` | e | E | % | 当前语句层级 |
| `0 0 X X 0` | f | F | & | 重建显示 |
| `0 0 X X X` | g | G | ' | 分支仅显示内容 |
| `0 X 0 0 0` | h | H | ( | 关闭`g`状态 |
| `0 X 0 0 X` | i | I | ) | 显示通过的内容 |
| `0 X 0 X 0` | j | J | @ | 关闭`i`或`k`状态 |
| `0 X 0 X X` | k | K | + | 显示未通过的内容 |
| `0 X X 0 0` | l | L | - | 仅显示复杂节点 |
| `0 X X 0 X` | m | M | * | 显示语句编号 |
| `0 X X X 0` | n | N | / | 隐藏语句编号 |
| `0 X X X X` | o | O | ^ | 冻结语句窗口 |
| `X 0 0 0 0` | p | P | 0 | 解冻语句 |
| `X 0 0 0 X` | q | Q | 1 | 显示少一行 |
| `X 0 0 X 0` | r | R | 2 | 显示多一行 |
| `X 0 0 X X` | s | S | 3 | 显示所有行 |
| `X 0 X 0 0` | t | T | 4 | 仅显示首行 |
| `X 0 X 0 X` | u | U | 5 | 正常刷新显示 |
| `X 0 X X 0` | v | V | 6 | 禁用刷新显示 |
| `X 0 X X X` | w | W | 7 | 显示所有行及层级 |
| `X X 0 0 0` | x | X | 8 | 单行单层级 |
| `X X 0 0 X` | y | Y | 9 | 开启空行显示 |
| `X X 0 X 0` | z | Z | = | 关闭空行显示 |
| `X X 0 X X` | , | < | [ | *(无)* |
| `X X X 0 0` | . | > | ] | *(无)* |
| `X X X 0 X` | ; | : | _ | *(无)* |
| `X X X X 0` | ? | \ | ALT | 居中点 |
| `X X X X X` | SP | TAB | CR | *(无)*
由于视图规范可通过键盘和弦与鼠标选择对象同步操作,它使NLS编辑器转变为交互式多维视图引擎。
## 键盘学习曲线:入门障碍
要成为NLS专家用户,必须学习键盘和弦命令(字符编码)。这并不困难——比学习QWERTY键盘触键打字简单得多。我仅用两天就成为了熟练的键盘触键打字者。实际上,我早在掌握双手打字前就已成为单手触键者。
令我痛心的是,这条初始学习曲线成为商业化的重大障碍。正如恩格尔巴特所言:*"史蒂夫·乔布斯通过用户研究发现,学习骑三轮车比十速自行车更容易,于是宣称所有人都应该骑三轮车。"* 只要右手使用鼠标,左手就应该配备键盘!
键盘和弦使用二进制编码将五键映射至31个字符码。熟悉二进制运算者能轻松掌握:若已知'x'的和弦,'y'只需在'x'基础上加1。
## 键盘:高性能编辑器界面的必要非充分条件
键盘并非NLS远见概念中唯一或最具创新性的部分。NLS的所有功能都服务于恩格尔巴特增强集体智慧的核心目标——着力增强用户能力,而非单纯为初学者简化系统。
若未观看恩格尔巴特1968年的演示视频,请务必观看《所有演示之母》(https://www.youtube.com/watch?v=yJDv-zdhzMY)。您或许会惊讶于显示终端的模糊程度——这场演示发生在1968年!当时计算机仍是读取打孔卡并打印连续纸的大型机,尚无字符终端。恩格尔巴特团队将硬件字符生成器连接至示波器,并用闭路电视摄像头拍摄屏幕传输至显示器,以此构建工作站显示系统。
维基百科记录的NLS历年创新包括:
- 计算机鼠标
- 二维显示编辑
- 文件内对象寻址与超链接
- 超媒体与大纲处理
- 灵活视图控制(视图规范)
- 多窗口系统
- 跨文件编辑
- 集成超媒体电子邮件与出版
- 文档版本控制
- 共享屏幕远程会议与计算机辅助会议
- 格式化指令与上下文敏感帮助
- 可编译“命令元语言”与RPC协议
*“天赋击中无人能及的目标;天才洞见无人可见的靶心。”* ——亚瑟·叔本华。道格·恩格尔巴特是远见者与天才。他1967年获得的鼠标专利在17年后(1984年)到期——恰逢苹果发布首款Macintosh。
## 键盘在施乐PARC的支线旅程
1973年配备鼠标与和弦键盘的施乐PARC Alto计算机
*图片由计算机历史博物馆(https://www.computerhistory.org/revolution/input-output/14/347)提供 © Mark Richards*
查克·萨克在设计施乐PARC Alto计算机(首款配备位图显示和局域网的计算机)时,同时集成了鼠标与和弦键盘。这主要源于从SRI转入PARC的软件工程师们——随着NLS资金缩减,威廉·英格利希(鼠标联合发明者)、比尔·杜瓦尔、唐纳德(斯莫基)·华莱士、查尔斯·厄比、詹姆斯·怀特和拉里·加里克等人加入了PARC。
然而,为Alto编写的大多数软件仅使用鼠标。这源于向模拟纸张的范式转移——使WYSIWYG(“所见即所得”)成为主导范式,而非恩格尔巴特倡导的动态超链接知识空间。讽刺的是,这种模拟纸张的范式通过史蒂夫·乔布斯传至苹果,通过查尔斯·西蒙尼传至微软。实际上,在施乐PARC键盘使用率最高的程序是《迷宫战争》(https://en.wikipedia.org/wiki/Maze_War)的Alto移植版!
施乐Alto版《迷宫战争》
*图片由DigiBarn计算机博物馆(https://www.digibarn.com/collections/screenshots/mazewar/)提供(由Dan Croghan贡献)*
## 回归未来?
我撰写键盘相关内容,是因为在讨论恩格尔巴特工作时其重要性常被忽视。完全可能为VS Code开发模态编辑器插件,实现NLS的动词-名词矩阵与视图规范过滤。现存在单手和弦输入设备,但均不及原版键盘简洁优雅。使用树莓派Pico或USB微控制器可轻松3D打印五键和弦板。
若能说服程序员投入两天掌握键盘和弦与动词-名词编辑,其编辑效率和专注度将显著提升。虽然我已退休,但若有雄心勃勃的开发者愿担此重任,延伸道格·恩格尔巴特未竟的革命(https://www.technologyreview.com/2013/07/23/177246/douglas-engelbarts-unfinished-revolution/)将蕴含巨大潜力。
## 延伸探索
- **道格·恩格尔巴特研究所(https://www.dougengelbart.org/):**探索增强集体智慧的传承、档案与持续愿景
- **《所有演示之母》(精华版)(https://www.youtube.com/watch?v=yJDv-zdhzMY):**观看这场向世界展示鼠标、超文本、动态视图规范与协作实时编辑的1968年公开演示
相似文章
现代应用
对现代代码编辑器的讽刺性观察,嘲弄过于复杂的AI功能、基于Electron的臃肿以及当代软件开发中的挫败感。
有人也讨厌这种无IDE的趋势吗?
一位开发者批评了AI编码工具移除代码编辑器、转而采用独立聊天界面的趋势,认为这浪费token且忽视了技术用户的需求,他们更希望在IDE内管理代码输出。
Google IDE 发展史
回顾 Google IDE 的演变历程:从个人选择的碎片化生态,到一款名为 Cider 的云端 IDE 的开发——该 IDE 因其在编辑和代码审查方面的高效性而广受欢迎。
过去一年,我是如何改变编程方式的?你呢?
一位程序员回顾了过去一年其开发工作流程的演变,从使用基于LLM的IDE自动补全转向采用CLI编码代理和plan.md文件,并对传统IDE的必要性提出了质疑。
你认为当今AI编码IDE中最大的缺失是什么?
一个讨论话题,询问开发者他们认为当前像Cursor、Claude Code、Codex和OpenCode这样的AI编码IDE缺少什么功能。