跳轉到內容

學習 vi 編輯器/入門

來自華夏公益教科書

學習 vi 編輯器: 入門基本任務使你的工作更容易高階任務細節Vi 克隆 (Vim基本導航模式提示和技巧對程式設計師有用的知識增強 VimVim 在 Windows 上VimL 指令碼語言, Vile, BB vi)vi 參考

vi是一個功能強大的編輯器,在 Unix 和類 Unix 作業系統中無處不在,但也存在於許多其他作業系統上,甚至在 MS-DOS、Windows 和 Macintosh 上。如果不是原始的 vi,通常至少有一個很好的克隆在你的系統上執行。即使你使用其他編輯器,你也必須對 vi 有一定的瞭解,因為你是管理員。有時,當你的電腦崩潰,只留下一個最小的系統供你修復時,vi 是唯一可用的編輯器。

vi,發音類似於'vee eye',最初是由 Bill Joy 在 1976 年為伯克利的 BSD Unix 編寫的,並且很快成為許多當時(原始)AT&T Unix 供應商特定版本的組成部分。後來它也被直接新增到 AT&T 的 System V Unix 中。Bill Joy 後來與人共同創辦了Sun Microsystems,併成為當時該公司的首席科學家。vi 代表視覺,並且是對經典 Unix 編輯器 ed 的巨大改進。ed 是一個行編輯器。如果你仍然熟悉 MS-DOS,那麼你可能知道 MS-DOS edlin 編輯器。ed 類似於 edlin,儘管比 edlin 更強大,但這並不意味著什麼。

vi 也有一個行模式,稱為 ex。事實上,有人可以爭辯說,該程式實際上是兩個編輯器合二為一,一個編輯器稱為 vi,另一個稱為 ex。在編輯過程中可以切換行模式和可視模式。也可以在啟動時選擇模式。然而,純粹的 ex 使用很少見。可視模式是主要的模式。

雖然 vi 代表視覺,但經典的 vi 主要透過字元鍵操作,而不是透過滑鼠或游標鍵操作。一旦你習慣了這一點,它就會變得非常方便,因為你的手移動到游標鍵或滑鼠上的次數更少。

vi 還充當 Unix 終端控制功能的一種孵化器。由於 vi 需要控制終端以及當時許多不同型別的終端,因此引入了termcap(終端功能)資料庫(後來被更靈活的terminfo 資料庫取代)。vi 的內部高階螢幕控制庫後來被分離出來,併成為curses - Unix 用於 CRT 螢幕處理的標準庫。

<c>
單個字元,例如 'a' 或 '1'。
<ESC>, <Ctrl-[>
表示應該按下鍵盤上的 Escape (Esc) 鍵,這與 Control 和 '[' 相同。
<CR>
表示應該按下回車 (Enter) 鍵。
<TAB>
表示應該按下 Tab 鍵
<Ctrl-x>, <C-x>
表示應該同時按下 Control 鍵和 'x' 鍵。'x' 可以是鍵盤上的幾乎任何其他鍵。
<Shift-x>, <S-x>, <X>
表示應該同時按下 Shift 鍵和 'x' 鍵
<Meta-x>, <M-x>
表示應該同時按下 Meta 或 Alt 鍵和 'x' 鍵。
:quit, :q
一個 Ex 命令。以 <:> 開頭,後面跟著命令,最後以 <CR> 結尾。對於許多 Ex 命令,有長格式 (:quit) 和短格式 (:q)。
:set nocompatible
表示一個設定。
strlen ()
表示一個函式。
/pattern/, ?pattern?
一個搜尋模式。vi 中的搜尋模式是 正則表示式
:ranges/search/replace/options, :global /pattern/ delete
一個搜尋模式與一個 Ex 命令結合。

vi 中的所有命令都區分大小寫。


unix-command(section)

本書有時會引用 Unix 命令。首次出現時,該命令名稱以典型的 Unix 風格書寫。這種風格包括命令名稱,後面跟著命令描述所在的聯機幫助頁部分,括在括號中。例如,sed(1) 指的是 Unix 的 sed 命令,它通常在 Unix 聯機幫助頁的第 1 部分中記錄(sed 是 Unix 流編輯器;一個無需使用者互動即可操作文字的工具)。

如果你還沒有,如何獲取 vi

[編輯 | 編輯原始碼]

如果你正在執行 Unix 系統或類 Unix 系統(為簡單起見,從現在開始我們將兩者都稱為“Unix 系統”),例如 BSD 或 Linux 發行版,甚至 Mac OS X,那麼你一定在你的系統上安裝了 vi 或其變體之一。

如果你正在執行 Windows,你可以獲得一個名為 "vim""elvis" 的 vi 版本。如果你在舊的 Mac OS(OS X 之前)系統上,你可以從 這裡 獲取 MacVim Classic。

知名的 vi 變體

[編輯 | 編輯原始碼]

如前所述,vi 有許多變體。它們之所以被建立是因為 vi 只能在相當昂貴的 Unix 作業系統上使用。雖然 vi 本身以及 nvi 是在伯克利為免費的 BSD Unix 變體建立的,但 BSD Unix 的使用需要原始的 AT&T Unix 許可證(這後來發生了變化,見下文)。例如,原始的 vi 使用了 AT&T 的 ed(1) 編輯器的程式碼。

隨著時間的推移,BSD 替換了大部分原始的 AT&T 程式碼,直到今天 BSD 中不再有這樣的程式碼,也不再需要原始的 Unix 許可證。作為替換 BSD 中所有 AT&T 程式碼工作的一部分,Keith Bostic 承擔了建立 vi 克隆的任務,該克隆沒有 AT&T 程式碼,稱為 nvi。nvi 隨後成為 BSD 的標準 vi,而不是原始的 vi。另一個 vi 克隆是 Elvis,由 Steve Kirkendal 編寫。

隨著時間的推移,nvi 進行了增強——例如,支援多個視窗——但最初它並不是為了增強而設計的,而只是“僅僅”是一個純粹的克隆。

BSD 的原始 vi(內部包含 ed 程式碼)繼續作為與 System V Unix 一起釋出的 vi,因為 AT&T 很久以前就決定從 BSD 中獲取它並將其新增到官方 Unix 中。當然,AT&T 對 AT&T Unix 許可證沒有問題,所以他們可能從未替換過原始 vi 中的 ed 程式碼。

然而,有些人仍然認為 nvi 太簡陋了,於是 vim 誕生了。vim(vi-improved),是另一個擴充套件 vi 功能的嘗試。與 nvi 不同的是,vim 進一步擴充套件了 vi 的功能。然而,有些人發現 vim 往往過於強大。vim 有兩種變體,一種是純文字版本,另一種是 GUI 版本,後者稱為 gvim

其他 vi 克隆包括前面提到的 elvisstevie。這些克隆誕生於 CP/M 和家用電腦領域,旨在將該編輯器也帶到這些平臺上。當然,它們後來被移植到 MS-DOS 和 Windows。如今,vim 似乎是免費/開源平臺和專有平臺上最流行的 vi 克隆。

您應該選擇您覺得最舒服的版本——如果您對您使用的編輯器感到不滿,它會影響您的工作效率。

使用 vi

[編輯 | 編輯原始碼]

啟動編輯器

[編輯 | 編輯原始碼]

如果您執行的是 Unix 系統,則可以透過鍵入以下命令啟動 vi

 vi<CR>

在命令列中。如果您執行的是 X,並且使用的是 GNOME、KDE、CDE/Motif 或 OpenLook 等桌面,您可能會有一個方便的啟動按鈕來啟動編輯器——如果您有這樣的設定,您只需點選該圖示即可。

如果您使用的是 Windows 或 DOS,並且使用的是 elvis,則可以透過雙擊“winelvis.exe”來啟動 Windows 編輯器,或者在 DOS 中,您可以在命令列中鍵入“elvis”來啟動編輯器。

您將看到類似於以下螢幕的介面

~
~
~
~
~
~
"No File"

退出編輯器

[編輯 | 編輯原始碼]

要暫時退出,請按 Escape 鍵(編輯器應該發出蜂鳴聲),然後輸入三個字元 :q! 並按回車鍵

<ESC>:q!<CR>

在您輸入最後一個 <CR> 之前,螢幕將類似於以下介面

~
~
~
~
~
~
:q!

:q!:quit! 的簡寫形式,它退出編輯器,而不儲存。

您應該會回到您的作業系統(或者更確切地說,回到您啟動編輯器的 shell)。

還有其他方法可以退出,例如按 <Z><Z> (<Shift-z><Shift-z>) 將儲存所有未儲存的工作並退出編輯器。鍵入 :wq 將始終儲存,即使沒有未儲存的更改,然後退出編輯器。 :x 如果沒有未儲存的更改,將寫入並退出。 :wq:x 需要您之前提供過檔名,因此它不適用於上述簡單示例。鍵入 :q 如果沒有進行任何更改,將退出;如果進行了更改,vi 將列印類似於“自上次更改後未寫入”的警告。

別擔心

[編輯 | 編輯原始碼]

許多第一次使用 vi 的使用者都在這裡停住了,再也不碰 vi 了。如果您嘗試在啟動後輸入一些文字,您很可能會聽到一系列蜂鳴聲,並出現相當奇怪的行為。別擔心。對於 vi 來說,這是完全正常的,編輯器並沒有損壞。您很快就會明白為什麼這是 vi 的正常行為。

既然您已經知道如何啟動和退出編輯器,讓我們繼續學習如何在 vi 中完成任務vi: 請參閱 學習 vi 編輯器/基本任務


學習 vi 編輯器: 入門基本任務使你的工作更容易高階任務細節Vi 克隆 (Vim基本導航模式提示和技巧對程式設計師有用的知識增強 VimVim 在 Windows 上VimL 指令碼語言, Vile, BB vi)vi 參考

華夏公益教科書