vi简史

NetBSD_6.1_vi_C_Hello_World.png

历史的道路不是涅瓦大街上的人行道,它彻底是在田野中前进的,有时穿过尘埃,有时穿过泥泞,有时横渡沼泽,有时行经丛林。---- 车尔尼雪夫斯基

当咱们天天打开电脑,使用vi的时候,一切显得是那么瓜熟蒂落,以为vi这个编辑器从古老的Unix走来,彷佛理所应当地成为咱们系统中的默认编辑器,殊不知道它曾经经历了怎样的曲折甚至是九死一辈子。咱们用它,咱们恨它,最终咱们又离不了它,这就是vihtml

混沌初开

1964年,一个21岁的年轻人Butler Lampson从哈佛大学文学院毕业,来到加州大学伯克利分校读博,在这里,他遇到了另外一个天才少年,18岁的Peter Deutsch在这里读本科,他们的任务是共同为一台SDS-940电脑编写一个分时操做系统:正则表达式

102649032p-03-01.jpg?w=600

在当时,绝大部分计算机使用的都是批处理方式运行指令,一个用户的使用是独占式的,在他的程序运行期间不会被别的程序打断。而Butler Lampson他们编写的操做系统是第一款通用型的分时操做系统。所以他们须要编写一个内核和一个命令行界面,须要能够可以编辑文本,因此他们开发了一个小程序叫作QED,它的名称的来源是Quick Editor快速编辑器)。express

除此以外, Butler Lampson的贡献还包括后来在施乐公司期间领导开发了 Alto,这个操做系统就是往后激发乔布斯灵感并从施乐偷师学艺的那一款操做系统。而且 Butler本人在 1992年得到了计算机学界最高奖 图灵奖

这时候,加州大学伯克利分校的另外一个天才少年Ken Thompson(这个名字往后将如雷贯耳,由于是他发明了Unix),刚刚得到了电子工程学士学位,一年后,得到了计算机科学硕士学位,并拿到了贝尔实验室的Offer小程序

在贝尔实验室,Ken的工做之一是把他母校的QED移植到另外一个比较大型的分时操做系统CTSS上,只不过这个CTSS是另外一个学校的产物——麻省理工学院。在移植的过程当中,Ken加入了他当时正在研究的,也是他最喜欢的Regular Expression正则表达式)。在此过程当中,KenQED变得很是熟悉。编辑器

Ken最终在1969年发明了Unix,而Unix系统中一个重要组件是ed,这个ed的不少功能直接来源于Ken的母校加州大学伯克利分校的QED。由ed而又衍生出来了一系列著名的Unix命令,例如grepsedgrep这个名词的来源实际上是g/re/p,第一个字母g表明global全局检索),re表明regular express正则表达式),而p表示print显示)。sed里面则加入了不少ed里没有实现的script脚本)功能。学习

至此,ed已经成为Unix操做系统的标配。优化

咱们来看一下一个标准的ed的编辑界面(下文标黑的粗体字是屏幕显示的内容,其他是用户输入的命令):ui

a
ed is the standard Unix text editor.
This is line number two.
.
2ispa

.
,l
ed is the standard Unix text editor.$
$
This is line number two.$
3s/two/three/
,l
ed is the standard Unix text editor.$
$
This is line number three.$
w text
65
q操作系统

是否是已经看到了一些vi的影子了呢?只是这时的ed还只是一个行编辑器,远远不是后来vi的样子。

脱胎换骨

Ken发明Unix6年以后,1975年,他回到母校伯克利分校,这一次,他的使命是在伯克利分校的电脑系统上安装他本身发明的Unix,而这一套Unix往后将成为Unix界极富盛名的BSDBerkeley Software Distribution伯克利软件套装)。也就是这一年的夏天,Ken在伯克利分校遇到了咱们故事的主人公Bill Joy,那一年,Bill21岁,正在伯克利分校读研。

Bill后来回忆说:

Ken Thompson来到伯克利而且带来了一台坏掉的 Pascal系统,而咱们准备在那个暑期修好它。当咱们对它进行修理时,发现咱们正在使用的名为 ed的编辑器彻底没法使用了。

因为Unix系统的广为流行,远在伦敦玛丽王后大学担任讲师的George Coulouris也不得不使用ed,但他得出的结论是:ed的难用程度达到了神级,根本就不是给人用的。因此他开始着手改进ed,并把改进以后的软件版本起名为em(editor for mortal给人类使用的编辑器)。1976年夏天,George访问伯克利分校,他带着一卷磁带,里面包含了他的em代码,并演示给别人看。其余人对此不感兴趣,而Bill Joy对此很受启发,他要来了em的源码,并在此基础上不断作改进,起名为en,而后又在en的基础上不断改进,一直改进到了ex(中间是否还有eo, ep, eq, ...已经不得而知)。

197710月,Bill Joyex的基础上,增长了全屏幕显示的功能,并将此功能命名为ex的可视化模式(visual mode),别名——vi

由于Bill Joy在开发vi的时候用的是一台ADM-3A电脑:

Adm3aimage.jpg

而这台电脑的键盘排布方式是这样的:

图片描述

这个键盘上并无上下左右方向键,而上下左右键是印在了HJKL这四个字母上,经过按下Ctrl+HJKL来实现上下左右移动,因此vi里的上下左右是经过HJKL来实现的,和游戏玩家里热爱的WASD是如此不一样,以致于不少人认为这是一种反人类的设计。但大家要知道,WASD不少不少年以后才被大多数人接受的设置

在当时的各款主流电脑上,方向键要么没有,要么也是一字排开。例如苹果的Apple II系统:

Apple_IIc_Plus_%28front%29.jpg

同时还应该注意到,ADM-3A电脑键盘上Esc键的位置有多么特殊,就在Q键的左侧,正好是咱们目前Tab键的位置,简直是触手可及,因此vi用它来作模式切换键是很是天然,而不像如今的Esc键离咱们的手那么远,要把小指伸出去很远才可以获得。

还有一个细节是在ADM-3A键盘上,除了上下左右四个键外,还有一个Home键,它也能够经过按下Ctrl来实现回到行头的效果,而更关键的是这个键同时也是~键,这也就是为何Unix系统里会用~来表明home目录的缘由。

黯淡时光

vi的第一个正式版本是在19783月随着BSD 1.0同时发布的,这注定了它之后将走过一段不平凡的岁月。

Bill Joy继续对vi进行升级,中间通过无数次叠代,在19796月发表了vi2.7版本后,退出主要开发者行列,但仍持续贡献到19808月的3.5版本,从那之后完全淡出。在谈到他为何要退出vi开发者行列时,他说:

我但愿咱们没有用尽键盘上的每个键。我以为 vi一个最有趣的特色是它是一款基于模式的编辑器。做为一款基于模式的编辑器, vi作的很是棒。 EMACS的优势之一是它是一款无模式的编辑器。但我历来没有想过要把 vi作成 EMACS那样。我也不擅长于优化 vi的代码。我以为编辑器的重绘功能很是棘手。 vi完成它目前的工做很是不错,但你老是在学习的过程当中编写程序……因此我再也不继续这样作了。
实际上,我当时正在试图给 vi加上多窗口编辑的功能,那是 1978年的 12月。个人磁带机坏了,而我没有任何备份。个人代码都丢失了,而我连文件目录都没有。我必须重写关于多窗口编辑功能的全部代码,我放弃了。我退回到上一版本,给代码增长了一些说明文档,完成了用户手册,而后就退出了。若是不是那一次事故的话,也许 vi就会有多窗口编辑功能了,但,谁知道呢?
vi的最根本问题是它没有鼠标,因此才有了各式各样的命令。但你不能用如今的眼光去看当时的软件。我以为若是能加上多级回退这个功能也很不错。但不管如何, vi的内核实际上仍是 ed,你不可能脱离这个事实。
这就有点像用一层层纸包裹起来的糖果,它没有一个统一的概念。我以为若是能够回到过去,我不会回去从新再来一遍。

1982224日,3个斯坦福大学毕业的学生Vinod KhoslaAndy BechtolsheimScott McNealy创办了Sun公司,他们挖来了伯克利分校毕业的Bill Joy,从而致使伯克利分校Unix BSDvi被锁死在3.7版本上。其余各家商业公司,包括IBMSunHPDEC都能在Bill Joy开发的vi的代码基础之上作改进,但其余人却不能够了。由于AT&T开始了那场臭名昭著的官司,控告BSD侵犯了他们的知识产权,而vi是基于BSD里面的ed作开发的,也属于被禁止使用之列。

关于这场官司,详细状况能够看阮一峰的文章《Unix版权史》。阮一峰在文章中评论道:

AT&TBSD之间的诉讼,是当代版权制度最恶劣的应用之一。
为何这么说?
首先,起诉者其实与 Unix毫无关系。这是 AT&T经理层的决定,而不是开发者的决定。事实上,包括 Ken Thompson在内的技术人员一直但愿,公司可以公开源码。他们彻底有理由这么要求,由于 Unix历来不是 AT&T的业务重点,最初是我的项目,后来也没有占用公司太多资源。销售 Unix的利润,在公司所有业务中,几乎能够忽略不计。为了一点点钱,去打击一个使许多人受益的产品,何须这样作呢。
其次, AT&T根本不关心 Unix的发展。它真正关心的是金钱和削弱对手。 1994年,官司尚未结束,它就把 Unix卖给了 Novell公司,今后再也不与 Unix发生关系,官司也所以不了了之。既然你不想要这个产品,为何要提起诉讼呢?真是不可理解。
最后,所谓的侵权几乎是不存在的。由于 NovellAT&T买下 Unix版权后,检查了 BSD的源码,在 18000个组成文件中删除了 3个,并对其余文件作了一些小修改,而后 BSD就从新得到了自由发布源码的许可。这意味着,至多只有千分之一的 BSD代码有版权问题,可是就由于这千分之一的问题,致使百分之百的产品被迫中断,彻底不符合比例原则。
因此,这场版权官司就是一家利益至上的公司,以微不足道的理由,为了一个本身根本不在意的产品,悍然发动一场损人不利己的战争。

BSD在法律纠纷中艰难前行,并分裂出了3个版本分支:FreeBSD, NetBSDOpenBSD。而在此以前,乔布斯黯然离开苹果,开始本身的第二次创业的时候,开发的NexT操做系统,也是从BSD上拉的分支,最后还吸收了不少FreeBSD的成果,最后成就了今天的Mac OSX,以及你手机里使用的iOS

图片描述

凤凰涅磐

在这场旷日持久的官司当中,vi不能用了,可是vi的热爱者并不肯意切换到emacs上,直到1990年,Steve Kirkendall才发布了一个vi的克隆版,起名叫Elvis1992年,Elvis被归入BSD1994年,Keith BosticElvis基础上开发了nvi,一直沿用至今。

花开两朵,各表一枝。1991年,芬兰大学生Linus Torvalds,他想学习Unix,可是买不起工做站,就本身写了一个能在386上运行的操做系统内核,并以本身的名字命名为:LinuxLinus Torvalds后来讲:

若是我早知道 BSD没有法律问题,而且能够被移植到 386,我会加入 BSD的开发,而不会本身动手写一个。

Linus写的Linux并非一个完整的操做系统,它只是一个内核,在内核以外,还应该有像vi这样的编辑器。因而在20006月,Gunnar Ritter基于Bill Joyvi源代码,把vi发布到了Linux操做系统和FreeBSD操做系统上(这时候的BSD因为法律诉讼的缘由已经被拆分红了FreeBSD, NetBSDOpenBSD三个分支)。一开始,这又是一个违法的举动,由于Ritter根本就没有得到AT&T的受权,可是随着20021月,对相关受权限制的逐渐解除,这个版本才正式成为一个合法的版本,也就是咱们今天使用的Linux上的vi

然而,使人唏嘘的是,虽然如今vi已经能够用在BSD的直系后裔FreeBSD上了,可是FreeBSD已经有了本身的替代品nvi,不肯再使用vi。反却是那些一开始没有viUnix版本,例如HP-UXAIX等等,能够继续冠冕堂皇地使用vi

虽然如此,可是因为Linux的普及,以及Mac OSX这个BSD的变种的流行,vi依然成为了各大操做系统中事实上的标配。vi这个编辑器的王者称号当之无愧,并将随着开源软件的发展一直永远流传。

最后,让咱们记住vi的做者Bill Joy。是他,给咱们带来了vi

Bill_joy.jpg

相关文章
相关标签/搜索