範圍控制
回憶上節課内容????
- 我們這次研究了
的定義和使用mark
-
定義mb
-
跳轉'b
- 可以對
,查詢删除marks
- 三種
marks
- 小寫 本檔案内
- 大寫 跨檔案
- 數字 配置檔案中
- 甚至可以在行編輯中,使用标記
-
從标記a的行複制到标記b的行'a,'by
-
把從a到b的行複制到目前位置'a,'bt.
-
把從a到b的行移動到文檔最後'a,'bm$
- 行編輯模式可真是太友善了!
- 可是,你知道嗎?
- 行編輯模式來自于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
指令來退出編輯器。
這兩個指令可以寫在同一行指令中,也就是
wq
。
ed
與
Vim
一樣,是一個模态編輯器;若要從指令模式進入輸入模式,取決于你試圖如何轉換文本,需使用
insert 指令(i)、append 指令(a)或 change 指令(c)
ed
還引入了
s/foo/bar/g
文法來查找和替換文本。
名字由來
ed
名字來自于
editor
編輯器
ed
不允許你編輯開放緩沖區中那些被其他行圍繞的行,也不允許移動光标,因為
ed
在每次修改的時候都必須重新列印整個檔案。在 1969 年,
ed
沒有任何機制來“清除”螢幕上的内容,因為”螢幕“就是一張紙,所有已經輸出的東西都像是已經用墨水列印出來了。在必要的時候,你可以使用清單指令(l)要求
ed
列印出一系列的行,但是大多數時候,你都是在你看不到的文本上操作。是以,使用
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
名字來源。
(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 單行編輯成為可能,還有一種“可見”模式,這種模式會占據整個螢幕,并且可以像我們今天所習慣的那樣,對整個檔案進行實時編輯。
(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
中使用的特性。
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
克隆版本開始工作。
(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
- 指令行還有什麼好玩的麼?????
- 下次再說 ????