oeasy教您玩轉vim - 48 - # ed由來

 

範圍控制

回憶上節課內容🤔

  • 我們這次研究了mark的定義和使用

    • mb定義
    • 'b跳轉
    • 可以對marks,查詢刪除
  • 三種marks

    • 小寫 本文件內
    • 大寫 跨文件
    • 數字 配置文件中
  • 甚至可以在行編輯中,使用標記

    • 'a,'by從標記a的行復制到標記b的行
    • 'a,'bt.把從a到b的行復制到當前位置
    • 'a,'bm$把從a到b的行移動到文檔最後
  • 行編輯模式可真是太方便了!
  • 可是,你知道嗎?
  • 行編輯模式來自於ed
  • 是當時的無奈之舉?
  • 怎麼回事?🤔

原始狀態

  • 我們從時間線捋回去,會發現vi進化過程沿着
  • ed->ex->vi->vim
  • 最早來自於貝爾實驗室的Ken Tompson

圖片描述

QED

  • 1966 年,貝爾實驗室聘用了 Ken Thompson
  • Thompson剛剛在加州大學伯克利分校完成了電氣工程和計算機科學的碩士學位在伯克利他使用一個名爲 QED 的文本編輯器
  • 該編輯器在 1965 到 1966 年間被開發用於伯克利分時系統
  • Thompson 到達貝爾實驗室後做的第一件事就是爲麻省理工學院兼容分時系統重寫 QED
  • 他後來又爲 Multics 項目寫了另一個版本的 QED
  • 在重寫過程中,他對程序進行了擴展
  • 以便用戶可以在文件中搜索某一行,並使用正則表達式進行替換。

開始

與伯克利的分時系統一樣,由麻省理工學院、通用電氣和貝爾實驗室合作的 Multics 項目試圖創建一個可行的商業分時操作系統。最終,AT&T 認爲這個項目毫無進展並退出。在沒有分時系統的情況下,Thompson 和貝爾實驗室資深研究員 Dennis Ritchie,開始懷念分時系統所提供的“交互式計算的感覺”,並着手創建他們自己的版本,該版本最終發展成爲 Unix。1969 年 8 月,在妻子和幼子外出去加州度假時,Thompson “給操作系統、shell、編輯器和彙編程序分別分配了一個星期”,將新系統的基本組件組合在一起。

這個編輯器被稱爲 ed 。它是基於 QED 的,但並不完全是 QED 的復現。 Thompson 決定放棄某些 QED 的功能,弱化了對常規的表達式的支持,因此 ed 只能理解相對簡單的正則表達式。QED 允許用戶打開多個緩衝區同時編輯多個文件,但是 ed 一次只使用一個緩衝區。QED 可以執行包含命令的緩衝區,而 ed 則不能。這些簡化可能是必要的。Dennis Ritchie 曾說過,去掉 QED 的高級正則表達式是“並不大的損失”。

ed

ed 現在是 POSIX 規範的一部分,所以如果你有一個符合 POSIX 的系統,你的電腦上就安裝了 ed 。現在,許多 ed 命令都是 Vim 的一部分,因此,這就值得擺弄一番了。例如,你必須使用 w 命令來寫入磁盤緩衝區,必須使用 q 命令來退出編輯器。

圖片描述

這兩個命令可以寫在同一行命令中,也就是 wqedVim 一樣,是一個模態編輯器;若要從命令模式進入輸入模式,取決於你試圖如何轉換文本,需使用 insert 命令(i)、append 命令(a)或 change 命令(c)ed 還引入了 s/foo/bar/g 語法來查找和替換文本。

名字由來

ed 名字來自於 editor 編輯器

ed 不允許你編輯開放緩衝區中那些被其他行圍繞的行,也不允許移動光標,因爲 ed 在每次修改的時候都必須重新打印整個文件。在 1969 年, ed 沒有任何機制來“清除”屏幕上的內容,因爲”屏幕“就是一張紙,所有已經輸出的東西都像是已經用墨水打印出來了。在必要的時候,你可以使用列表命令(l)要求 ed 打印出一系列的行,但是大多數時候,你都是在你看不到的文本上操作。因此,使用 ed 就像是嘗試用一個低電量的手電筒在黑暗房間中摸索。每次你只能看到那麼一點兒,所以必須盡最大努力去記住每件東西的位置。

來試試 ed

  • 可以sudo apt install ed
  • 來裝一下 vi 的老祖宗
  • ls -lah > oeasy.txt
  • ed oeasy.txt
  • 1顯示第1
  • 2,5p,顯示25
  • 我們能感覺到顯示器其實是一張紙
  • 這個4,6p命令在vi也能用,含義是print

文本編輯器 em

ThompsonRitchie 來說, ed 已經足夠好了。但是其他人則認爲它很難用,而且它作爲一個淋漓盡致地表現 Unix 對新手敵意的例子而臭名昭著。在 1975 年,一個名叫 George Coulouris 的人(這位前輩很神奇,他的爸爸是英國演員,出演過公民凱恩)在倫敦瑪麗皇后學院的 Unix 系統上開發了一個改進版 edCoulouris 利用他在瑪麗女王學院的視頻顯示器開發他的編輯器。與 ed 不同的是,Coulouris 的程序允許用戶編輯在屏幕中的一行代碼,通過一次次擊鍵的方式來操作行(想象一下在 Vim 中每次編輯一行)。 Thompson 拜訪瑪麗女王學院時,看到 Coulouris 已經寫好的程序,駁斥道他不需要在編輯文件的時候看到它的狀態。受此啓發,Coulouris 將他的程序命名爲 em,或者“爲凡人而生的編輯器”。the editor for mortals,這也是 em 名字來源。

圖片描述

(George Coulouris)

vi

1976年,Coulourisem 引入了加州大學伯克利分校,在那裏他用了一個夏天的時間在 CS 系訪學。這是 Ken Thompson 離開伯克利去貝爾實驗室工作十年之後的事了。在伯克利,Coulouris 遇到了 Bill Joy,一名研究生。Coulouris 斯向 Joy 展示了 emJoyCoulouris 的源代碼爲基礎,爲擴展 ed 建立了一個名爲 ex 的改進版 ed。1978年,1.1 版本的 ex 與第 1 個版本的 BSD Unix 捆綁在一起。ex 在很大程度上與 ed兼容,但它增加了兩種模式:一種“開放”模式,這種模式可以使 em 單行編輯成爲可能,還有一種“可見”模式,這種模式會佔據整個屏幕,並且可以像我們今天所習慣的那樣,對整個文件進行實時編輯。

圖片描述

(Bill Joy)

1979 年的第 2 版 BSD 引入了一個名爲 vi 的可執行文件,它只在可視模式下打開 exvi 名字來自於 visual 可視模式

進化

ex/vi (後來稱爲 vi)建立了我們現在使用的 Vim 中大多數的約定,但這些約定當時並不是 ed 的一部分。Bill Joy 使用的視頻終端是 Lear Siegler ADM-3A,它的鍵盤沒有光標鍵。而是,h、j、k 和 l 鍵上繪製光標鍵,所以 Bill Joy 在vi 中就使用這些鍵來進行光標移動。ADM-3A 鍵盤上 escape 鍵位置是今天我們所使用的鍵盤上的 tab 鍵,這也就解釋了爲什麼這樣一個難以夠着的鍵會被用來實現像退出當前模式這麼常見的操作。前綴命令的 :字符同樣也來自 i,它在常規模式下(即運行 ex 進入的模式)使用 : 作爲提示。這解決了一個 ed 中被長期詬病的問題,也就是一旦啓動之後,沒有任何反饋信息向用戶致以問候。在可見模式下,保存和退出需要使用現在仍在使用的經典 wq“Yanking”和“putting”標記、以及用於設置選項的 set 命令都是原始 vi 的一部分。我們今天在 Vim 中使用的的基本文本編輯過程,都是 vi 中使用的特性。

圖片描述

vi 是除 ed 之外唯一與 BSD Unix 捆綁的文本編輯器。在那個時候,Emacs 可能會花費數百美元(這是在 GNU Emacs 之前),所以 vi 變得非常流行。但是 vied 的直接衍生版本,這意味着如果沒有 AT&T 的源代碼,源代碼就不能被修改。這促使一些人創建了 vi 的開源版本。 STEVIE (專門爲 VI 愛好者的 ST 編輯器)出現於1987年,Elvis 出現於 1990 年,nvi 出現於 1994 年。其中一些克隆版本添加了額外的功能,如語法高亮和窗口分離。尤其是 Elvis ,它的許多功能被整合到 Vim 中,因爲許多 Elvis 用戶推動了這些功能的加入。)

緣起

“Vim”現在是“改進版 Vi”的縮寫,而最初代表的是“模擬版 Vi”。和其他許多“vi克隆版本”一樣,Vim 始於在一個無法使用 vi 的平臺上覆現 vi 的一個嘗試。在荷蘭 Venlo 一家影印公司工作的軟件工程師 Bram Moolenaar 想要爲他全新的 Amiga 2000 準備一款類似於 vi 的編輯器。Moolenaar 已經習慣了在大學時使用的 Unix 系統上的 vi ,當時他 已經對 vi 瞭如指掌。所以在 1988 年,Moolenaar 使用當時的 STEVIE vi 克隆版本開始工作。

圖片描述


(Bram Moolenaar,2006 年加入 Google)

Moolenaar 接觸到 STEVIE 緣於其曾經出現在一個叫 Fred Fish 的磁盤上。Fred Fish 是一名美國程序員,每個月都會寄出一張軟盤,內含爲 Amiga 平臺提供的精選可用開源軟件。有點類似於國內曾經的軟件指南。任何人只要支付郵費就可以得到一張這樣的磁盤。有若干版本的 STEVIE 曾在 Fred Fish 磁盤上發佈。Moolenaar 使用的 STEVIE 版本在 Fred Fish 256 號磁盤上發佈。(令人失望的是,Fred Fish 磁盤似乎與 Freddi Fish 海底大冒險遊戲 沒有任何關係。)

Moolenaar 喜歡 STEVIE,但很快就注意到其缺失了很多 vi 命令。因此,在第一次發佈 Vim 時,Moolenaar 優先考慮了 vi 的兼容性。當時已經有其他人編寫了一系列的 vi 宏,當運行一個合適的 vi 兼容編輯器時,可以求解一個隨機生成的迷宮。Moolenaar 能夠讓這些宏在 Vim 中運行。1991年,VimVi模擬 爲名第一次發佈於 Fred Fish 591 號磁盤。Moolenaar 添加了一些特性(包括多級撤銷和解決編譯器錯誤的“quickfix”模式),這意味着 Vim 已經完成了對 Vi 的超越。在 1993 年通過 FTP 發佈 Vim 2.0 之前,Vim 都仍以 Vi模擬 的身份存在。

從vi到vim

在衆多互聯網合作者的幫助下,Moolenaar 穩健地在 Vim 中加入了一些功能。Vim 2.0 引入了對 wrap 選項的支持,以及對長行文本進行水平滾動的支持。受到了 vi克隆nvi 的啓發,Vim 3.0 增加了對分割窗口和緩衝區的支持。Vim 現在還將每個緩衝區保存到交換文件中以避免程序崩潰造成文件丟失。Vim 支持語法高亮顯示,第一次出現是在 Vim 5.0 中。與此同時,Vim 的受歡迎程度也在不斷增長。它被移植到 MS-DOSWindowsMac,甚至被移植到 Unix 與原來的 vi 競爭。

2006 年,VimLinux Journal 讀者評爲最受歡迎的編輯器。如今,根據 2018 年 Stack Overflow 的開發者調查,Vim 是最受歡迎的文本模式(即終端模擬器)編輯器,受用於 25.8% 的軟件開發人員(和 40% 的 Sysadmin / DevOps 人員)。在 1980 年代末和整個 1990 年代,程序員一度發起了“編輯器戰爭”,將 Emacs 用戶與 vi (即最終的 Vim )用戶進行了對比。雖然 Emacs 肯定仍有一些追隨者,但有些人認爲編輯器戰爭已經以 Vim 獲勝而結束。2018年 Stack Overflow 的開發者調查顯示只有 4.1% 的受訪者使用 Emacs,也驗證了這個事實。

Vim 是如何變得如此成功的?顯然,人們喜歡 Vim 所提供的特性。但我認爲,Vim 背後的悠久歷史表明了它的優勢遠不僅僅體現在其功能集上。Vim 的代碼庫可以追溯到 1988 年,當時 Moolenaar 開始研究它。

某種程度上要感謝 Bill Joy 和 Bram Moolenaar 對向後兼容性非比尋常的關注,才使好的想法逐漸積累起來。從這個意義上說, vim文本編輯器 是運行時間最長、最成功的開源項目之一,得益於計算機世界中一些最偉大的思想貢獻。我不認爲“創業公司無視所有先例來創造顛覆性的新軟件”的開發方式都是不妥的,但 Vim 提醒我們,這種協作和增量的方式同樣能產生奇蹟。

總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章