天天看點

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​

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

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​

​ 指令來退出編輯器。

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

這兩個指令可以寫在同一行指令中,也就是 ​

​wq​

​。​

​ed​

​ 與 ​

​Vim​

​ 一樣,是一個模态編輯器;若要從指令模式進入輸入模式,取決于你試圖如何轉換文本,需使用​

​ 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​

    ​,顯示​

    ​2​

    ​到​

    ​5​

  • 我們能感覺到顯示器其實是一張紙
  • 這個​

    ​4,6p​

    ​指令在​

    ​vi​

    ​也能用,含義是​

    ​print​

文本編輯器 em

對 ​

​Thompson​

​ 和 ​

​Ritchie​

​ 來說, ​

​ed​

​ 已經足夠好了。但是其他人則認為它很難用,而且它作為一個淋漓盡緻地表現 ​

​Unix​

​ 對新手敵意的例子而臭名昭著。在 1975 年,一個名叫​

​ George Coulouris​

​ 的人​

​(這位前輩很神奇,他的爸爸是英國演員,出演過公民凱恩)​

​在倫敦瑪麗皇後學院的 ​

​Unix​

​ 系統上開發了一個改進版 ​

​ed​

​ 。​

​Coulouris​

​ 利用他在瑪麗女王學院的視訊顯示器開發他的編輯器。與 ​

​ed​

​ 不同的是,​

​Coulouris​

​ 的程式允許使用者編輯在螢幕中的一行代碼,通過一次次擊鍵的方式來操作行(想象一下在 ​

​Vim​

​ 中每次編輯一行)。 ​

​Thompson​

​ 拜訪瑪麗女王學院時,看到 ​

​Coulouris​

​ 已經寫好的程式,駁斥道他不需要在編輯檔案的時候看到它的狀态。受此啟發,​

​Coulouris​

​ 将他的程式命名為 ​

​em​

​,或者“為凡人而生的編輯器”。​

​the editor for mortals​

​,這也是 ​

​em​

​ 名字來源。

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

(George Coulouris)

vi

1976年,​

​Coulouris​

​ 把 ​

​em​

​ 引入了加州大學伯克利分校,在那裡他用了一個夏天的時間在 ​

​CS​

​ 系訪學。這是 ​

​Ken Thompson​

​ 離開伯克利去貝爾實驗室工作十年之後的事了。在伯克利,​

​Coulouris​

​ 遇到了 ​

​Bill Joy​

​,一名研究所學生。​

​Coulouris​

​ 斯向 ​

​Joy​

​ 展示了 ​

​em​

​, ​

​Joy​

​ 以 ​

​Coulouris​

​ 的源代碼為基礎,為擴充 ​

​ed​

​ 建立了一個名為 ​

​ex​

​ 的改進版 ​

​ed​

​。1978年,1.1 版本的 ​

​ex​

​ 與第 1 個版本的 ​

​BSD Unix​

​ 捆綁在一起。​

​ex​

​ 在很大程度上與 ed相容,但它增加了兩種模式:一種“開放”模式,這種模式可以使 em 單行編輯成為可能,還有一種“可見”模式,這種模式會占據整個螢幕,并且可以像我們今天所習慣的那樣,對整個檔案進行實時編輯。

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

(Bill Joy)

1979 年的第 2 版 BSD 引入了一個名為 ​

​vi​

​ 的可執行檔案,它隻在可視模式下打開 ​

​ex​

​vi​

​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​

​ 中使用的特性。

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

​vi​

​ 是除 ​

​ed​

​ 之外唯一與 ​

​BSD Unix​

​ 捆綁的文本編輯器。在那個時候,​

​Emacs​

​ 可能會花費數百美元(這是在 ​

​GNU Emacs​

​ 之前),是以 ​

​vi​

​ 變得非常流行。但是 ​

​vi​

​ 是 ​

​ed​

​ 的直接衍生版本,這意味着如果沒有​

​ 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​

​ 克隆版本開始工作。

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

(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年,​

​Vim​

​Vi模拟​

​ 為名第一次釋出于 ​

​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-DOS​

​、 ​

​Windows​

​Mac​

​,甚至被移植到 ​

​Unix​

​ 與原來的 ​

​vi​

​ 競争。

2006 年,​

​Vim​

​ 被 ​

​Linux 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​

    ​ 進化到今天,依然還有好多人使用
  • 而且 ​

    ​ssh​

    ​ 的時候直接 ​

    ​vim​

    ​ 就很友善
  • 指令行還有什麼好玩的麼?????
  • 下次再說 ????