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

相關文章
相關標籤/搜索