历史的道路不是涅瓦大街上的人行道,它彻底是在田野中前进的,有时穿过尘埃,有时穿过泥泞,有时横渡沼泽,有时行经丛林。---- 车尔尼雪夫斯基
当咱们天天打开电脑,使用vi的时候,一切显得是那么瓜熟蒂落,以为vi
这个编辑器从古老的Unix
走来,彷佛理所应当地成为咱们系统中的默认编辑器,殊不知道它曾经经历了怎样的曲折甚至是九死一辈子。咱们用它,咱们恨它,最终咱们又离不了它,这就是vi
。html
1964
年,一个21
岁的年轻人Butler Lampson从哈佛大学文学院毕业,来到加州大学伯克利分校读博,在这里,他遇到了另外一个天才少年,18
岁的Peter Deutsch在这里读本科,他们的任务是共同为一台SDS-940
电脑编写一个分时操做系统:正则表达式
在当时,绝大部分计算机使用的都是批处理方式运行指令,一个用户的使用是独占式的,在他的程序运行期间不会被别的程序打断。而Butler Lampson
他们编写的操做系统是第一款通用型的分时操做系统。所以他们须要编写一个内核和一个命令行界面,须要能够可以编辑文本,因此他们开发了一个小程序叫作QED
,它的名称的来源是Quick Editor
(快速编辑器)。express
除此以外,Butler Lampson
的贡献还包括后来在施乐公司期间领导开发了Alto
,这个操做系统就是往后激发乔布斯灵感并从施乐偷师学艺的那一款操做系统。而且Butler
本人在1992
年得到了计算机学界最高奖 图灵奖。
这时候,加州大学伯克利分校的另外一个天才少年Ken Thompson(这个名字往后将如雷贯耳,由于是他发明了Unix
),刚刚得到了电子工程学士学位,一年后,得到了计算机科学硕士学位,并拿到了贝尔实验室的Offer
。小程序
在贝尔实验室,Ken
的工做之一是把他母校的QED
移植到另外一个比较大型的分时操做系统CTSS
上,只不过这个CTSS
是另外一个学校的产物——麻省理工学院。在移植的过程当中,Ken
加入了他当时正在研究的,也是他最喜欢的Regular Expression
(正则表达式)。在此过程当中,Ken
对QED
变得很是熟悉。编辑器
Ken
最终在1969
年发明了Unix
,而Unix
系统中一个重要组件是ed
,这个ed
的不少功能直接来源于Ken
的母校加州大学伯克利分校的QED
。由ed
而又衍生出来了一系列著名的Unix
命令,例如grep
和sed
。grep
这个名词的来源实际上是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
发明Unix
的6
年以后,1975
年,他回到母校伯克利分校,这一次,他的使命是在伯克利分校的电脑系统上安装他本身发明的Unix
,而这一套Unix
往后将成为Unix
界极富盛名的BSD
(Berkeley Software Distribution
,伯克利软件套装)。也就是这一年的夏天,Ken
在伯克利分校遇到了咱们故事的主人公Bill Joy,那一年,Bill
是21
岁,正在伯克利分校读研。
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
, ...已经不得而知)。
1977
年10
月,Bill Joy
在ex
的基础上,增长了全屏幕显示的功能,并将此功能命名为ex
的可视化模式(visual mode
),别名——vi
。
由于Bill Joy
在开发vi
的时候用的是一台ADM-3A
电脑:
而这台电脑的键盘排布方式是这样的:
这个键盘上并无上下左右方向键,而上下左右键是印在了HJKL
这四个字母上,经过按下Ctrl+HJKL
来实现上下左右移动,因此vi
里的上下左右是经过HJKL
来实现的,和游戏玩家里热爱的WASD
是如此不一样,以致于不少人认为这是一种反人类的设计。但大家要知道,WASD
是不少不少年以后才被大多数人接受的设置。
在当时的各款主流电脑上,方向键要么没有,要么也是一字排开。例如苹果的Apple II
系统:
同时还应该注意到,ADM-3A
电脑键盘上Esc
键的位置有多么特殊,就在Q
键的左侧,正好是咱们目前Tab
键的位置,简直是触手可及,因此vi
用它来作模式切换键是很是天然,而不像如今的Esc
键离咱们的手那么远,要把小指伸出去很远才可以获得。
还有一个细节是在ADM-3A
键盘上,除了上下左右四个键外,还有一个Home
键,它也能够经过按下Ctrl
来实现回到行头的效果,而更关键的是这个键同时也是~
键,这也就是为何Unix
系统里会用~
来表明home
目录的缘由。
vi
的第一个正式版本是在1978
年3
月随着BSD 1.0
同时发布的,这注定了它之后将走过一段不平凡的岁月。
Bill Joy
继续对vi
进行升级,中间通过无数次叠代,在1979
年6
月发表了vi
的2.7
版本后,退出主要开发者行列,但仍持续贡献到1980
年8
月的3.5
版本,从那之后完全淡出。在谈到他为何要退出vi
开发者行列时,他说:
我但愿咱们没有用尽键盘上的每个键。我以为vi
一个最有趣的特色是它是一款基于模式的编辑器。做为一款基于模式的编辑器,vi
作的很是棒。EMACS
的优势之一是它是一款无模式的编辑器。但我历来没有想过要把vi
作成EMACS
那样。我也不擅长于优化vi
的代码。我以为编辑器的重绘功能很是棘手。vi
完成它目前的工做很是不错,但你老是在学习的过程当中编写程序……因此我再也不继续这样作了。
实际上,我当时正在试图给vi
加上多窗口编辑的功能,那是1978
年的12
月。个人磁带机坏了,而我没有任何备份。个人代码都丢失了,而我连文件目录都没有。我必须重写关于多窗口编辑功能的全部代码,我放弃了。我退回到上一版本,给代码增长了一些说明文档,完成了用户手册,而后就退出了。若是不是那一次事故的话,也许vi
就会有多窗口编辑功能了,但,谁知道呢?
vi
的最根本问题是它没有鼠标,因此才有了各式各样的命令。但你不能用如今的眼光去看当时的软件。我以为若是能加上多级回退这个功能也很不错。但不管如何,vi
的内核实际上仍是ed
,你不可能脱离这个事实。
这就有点像用一层层纸包裹起来的糖果,它没有一个统一的概念。我以为若是能够回到过去,我不会回去从新再来一遍。
1982
年2
月24
日,3
个斯坦福大学毕业的学生Vinod Khosla,Andy Bechtolsheim和Scott McNealy创办了Sun
公司,他们挖来了伯克利分校毕业的Bill Joy
,从而致使伯克利分校Unix
BSD
的vi
被锁死在3.7
版本上。其余各家商业公司,包括IBM
,Sun
,HP
,DEC
都能在Bill Joy
开发的vi
的代码基础之上作改进,但其余人却不能够了。由于AT&T
开始了那场臭名昭著的官司,控告BSD
侵犯了他们的知识产权,而vi
是基于BSD
里面的ed
作开发的,也属于被禁止使用之列。
关于这场官司,详细状况能够看阮一峰的文章《Unix版权史》。阮一峰在文章中评论道:
AT&T
与BSD
之间的诉讼,是当代版权制度最恶劣的应用之一。
为何这么说?
首先,起诉者其实与Unix
毫无关系。这是AT&T
经理层的决定,而不是开发者的决定。事实上,包括Ken Thompson
在内的技术人员一直但愿,公司可以公开源码。他们彻底有理由这么要求,由于Unix
历来不是AT&T
的业务重点,最初是我的项目,后来也没有占用公司太多资源。销售Unix
的利润,在公司所有业务中,几乎能够忽略不计。为了一点点钱,去打击一个使许多人受益的产品,何须这样作呢。
其次,AT&T
根本不关心Unix
的发展。它真正关心的是金钱和削弱对手。1994
年,官司尚未结束,它就把Unix
卖给了Novell
公司,今后再也不与Unix
发生关系,官司也所以不了了之。既然你不想要这个产品,为何要提起诉讼呢?真是不可理解。
最后,所谓的侵权几乎是不存在的。由于Novell
从AT&T
买下Unix
版权后,检查了BSD
的源码,在18000
个组成文件中删除了3
个,并对其余文件作了一些小修改,而后BSD
就从新得到了自由发布源码的许可。这意味着,至多只有千分之一的BSD
代码有版权问题,可是就由于这千分之一的问题,致使百分之百的产品被迫中断,彻底不符合比例原则。
因此,这场版权官司就是一家利益至上的公司,以微不足道的理由,为了一个本身根本不在意的产品,悍然发动一场损人不利己的战争。
BSD
在法律纠纷中艰难前行,并分裂出了3
个版本分支:FreeBSD
, NetBSD
和OpenBSD
。而在此以前,乔布斯黯然离开苹果,开始本身的第二次创业的时候,开发的NexT
操做系统,也是从BSD
上拉的分支,最后还吸收了不少FreeBSD
的成果,最后成就了今天的Mac OSX
,以及你手机里使用的iOS
。
在这场旷日持久的官司当中,vi
不能用了,可是vi
的热爱者并不肯意切换到emacs
上,直到1990
年,Steve Kirkendall
才发布了一个vi
的克隆版,起名叫Elvis
。1992
年,Elvis
被归入BSD
,1994
年,Keith Bostic在Elvis
基础上开发了nvi
,一直沿用至今。
花开两朵,各表一枝。1991
年,芬兰大学生Linus Torvalds,他想学习Unix
,可是买不起工做站,就本身写了一个能在386
上运行的操做系统内核,并以本身的名字命名为:Linux
。Linus Torvalds
后来讲:
若是我早知道BSD
没有法律问题,而且能够被移植到386
,我会加入BSD
的开发,而不会本身动手写一个。
Linus
写的Linux
并非一个完整的操做系统,它只是一个内核,在内核以外,还应该有像vi
这样的编辑器。因而在2000
年6
月,Gunnar Ritter
基于Bill Joy
的vi
源代码,把vi
发布到了Linux
操做系统和FreeBSD
操做系统上(这时候的BSD
因为法律诉讼的缘由已经被拆分红了FreeBSD
, NetBSD
和OpenBSD
三个分支)。一开始,这又是一个违法的举动,由于Ritter
根本就没有得到AT&T
的受权,可是随着2002
年1
月,对相关受权限制的逐渐解除,这个版本才正式成为一个合法的版本,也就是咱们今天使用的Linux
上的vi
。
然而,使人唏嘘的是,虽然如今vi
已经能够用在BSD
的直系后裔FreeBSD
上了,可是FreeBSD
已经有了本身的替代品nvi
,不肯再使用vi
。反却是那些一开始没有vi
的Unix
版本,例如HP-UX
,AIX
等等,能够继续冠冕堂皇地使用vi
。
虽然如此,可是因为Linux
的普及,以及Mac OSX
这个BSD
的变种的流行,vi
依然成为了各大操做系统中事实上的标配。vi
这个编辑器的王者称号当之无愧,并将随着开源软件的发展一直永远流传。
最后,让咱们记住vi
的做者Bill Joy
。是他,给咱们带来了vi
。