
比尔·乔伊回顾 vi 编辑器诞生:50 年后重读 1984 年采访
来源标题:The vi Editor Turns 50: Interview with Bill Joy (1984)
Unix Review 1984 年 8 月刊采访了时任 Sun 研发副总裁的 Bill Joy,他讲述了 vi 的由来。Joy 1975 年到伯克利读理论,为运行一个 200 行的 Pascal 程序与 Chuck Haley 一起改进 Pascal 系统,由此深入系统开发。他最初用 Pascal 写解析程序,因需在内存中构建整棵解析树而遇到问题。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
7 2 3 分享 摘自1984年8月号《Unix评论》 比尔·乔伊是那种少有的能在键盘上敲代码的同时进行快速技术对话的人。他似乎无穷无尽的精力催生了C shell命令解释器、vi屏幕编辑器和伯克利分页内核等成果。《UNIX评论》派吉姆·乔伊斯前往太阳微系统公司,乔伊在那里担任负责研发的副总裁,去捕捉这份精力。
乔伊:说来有趣。1975年我作为理论方向的学生来到伯克利,和迈克·哈里森一起研究通用上下文无关解析算法,所以我试着用Pascal写这个东西,因为Pascal有集合类型,而肯·汤普森允许集合长度任意。程序能跑,但有200行——对Pascal系统来说几乎太大了。我找汤普森商量,看怎么让Pascal系统处理这个程序。查克·哈利和我一起设法让Pascal系统应付它,但方向错了,因为它把整个解析树都建在内存里。于是我被卷了进去,争取到了系里的帮助,也燃起了一些希望,指望最终能获得足够支持让这个程序在Pascal下跑起来。
但在做那件事的同时,我们也在ed上东改西改,只是加点东西。查克有天深夜过来,加入了open模式——可以在CRT最下面一行移动光标。后来伦敦玛丽女王学院的乔治·库卢里斯来到伯克利,带来了一个叫em的东西,意思是“凡人的编辑器”。它有两个错误提示而不是一个。它有提示符,还有它自己那套为ITT终端做的古怪open模式,在ADM 3A上实在不太好用。
于是查克和我看了看,在em上改了一阵,最终我们把em里的东西扒出来,一部分放进了当时叫en的东西里,那其实就是ed加上一些em特性。查克会晚上过来——我们的工作时间其实并不完全一样,虽然下午有重叠。我把编辑器弄坏,他来修;然后他弄坏,我来修。我特别热衷于写手册页,所以我为我们打算做但从未实现的所有强大功能都写了手册页。
最终查克凭他在Pascal系统那部分工作拿到了博士学位。他走之后,计算机中心有了ex 0.1版。那是来自EP 016的编辑器版本,EP 016代表1976年9月1日,即那个二进制文件的生成日期——之后我们很快就把源码弄丢了,因为我们改动太多,又没有SCCS。
说真的,一切的开端是我们弄到了几台ADM-3A来做屏幕编辑。我记得卡特当选后不久,一个周六,我坐在加州奥尔巴尼的公寓里,一边听人们打电话给卡特问些蠢问题,一边设计屏幕编辑器。这可以确定时间:大概是76年。它确实是我们最初对Pascal感到挫败的产物。从那儿就一路发展下去了。他们做参考卡的时候——78、79年——我就不再弄它了,之后我真的五年没碰过它。
迈克·霍顿从贝尔实验室带来了他的编辑器,叫hed,即“霍顿的编辑器”。vi胜出时他很失望。但vi在当地用户中形成了势头——而马克多少出于无奈,出去实际支持了vi。这挺好,因为我已经没那个耐心了。光是把人寄给我的termcap条目加进去,每周就得花好几个小时,三四年后我累了。
评论:计数域功能不是布鲁斯·恩格拉实现的吗?
乔伊:是布鲁斯提议的。有一段时间编辑器文档里有个致谢部分,提到了所有帮过忙的人——我不知道第二卷里还有没有。
屏幕编辑模式的很多想法是从一本Bravo手册里偷来的,我偷偷看了并照抄了。点号命令其实就是Bravo里的双escape,即重做命令。大部分东西都是偷来的。有些是从ed偷的——我们弄到了多伦多版ed的手册页,我想罗布·派克跟那有点关系。我们从那里拿了一些正则表达式扩展。
乔伊:我希望能没用上键盘上所有的键。我觉得有意思的是,vi确实是个基于模式的编辑器。我认为就基于模式的编辑器而言,它相当不错。不过EMACS的优点之一是可编程性和无模式。这两个想法我从来没想到过。我写vi的时候也不太擅长组织代码。我觉得编辑器的重显示模块几乎难以驾驭。就它做的事而言它做得很好,但当你一边学习一边写程序的时候……这就是我停下来的原因。
实际发生的情况是,我们装VAX的时候——应该是78年12月——我正在给vi加多窗口。我们没有任何备份,磁带机又坏了。我甚至在无法备份的情况下继续工作。然后源码被压坏了,我没有完整的清单。我几乎为重显示代码重写了一遍以支持窗口,就在那时我放弃了。之后我回到之前的版本,只是给代码写了文档,完成了手册,就此封笔。如果那次压坏没发生,vi会有多窗口,我可能还会加入一些可编程性——但我说不准。
vi的根本问题在于它没有鼠标,因此你才会有这么多命令。某种意义上,它和鼠标导向的东西是反着来的。我觉得多级撤销也会很棒。但根本上,vi里面仍然是ed。你骗不了它。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。