如果您曾和 IBM® AIX®(UNIX® 的一個版本)或 Linux® 打過交道,使用的很可能是 vi 編輯器。自 1976 年提出 vi 的概念開始,它已經成為編輯文件的主要工具。您可能會問:“有比 vi 功能更強大的編輯工具嗎?”當然有,那就是 Vim,本文將詳細介紹 Vim 增強功能,這些增強功能使 Vim 成為 UNIX 和 Linux 領域中廣泛使用的編輯器。
vi 程序是一個功能強大的文本編輯器。Sun Microsystems 的共同創始人 William Joy 最初在 1976 年編寫了針對 Berkeley Software Distribution(BSD)UNIX 早期版本的 vi 編輯器。據說 Bill 一個周末就編寫了 vi,不過他說這純屬謠言。該程序以 UNIX 擴展行編輯器中的 visual 命令命名 — 簡稱為 ex。
vi 編輯器是一個功能很強的編輯器,它有幾個許多人都沒有發覺的功能。Vi 是一個模型編輯器,因此不同的設置會產生不同的結果。vi 中有三種不同的模式:命令、插入(或 輸入)和行。在插入模式下操作時,文本被寫入臨時編輯文件;在一般模式下,相同的鍵擊會觸發嵌入在編輯器中的命令。要進入插入模式,按 I 鍵即可;要退出命令模式,按 Escape(我將在本文後面更詳細地介紹行模式)。
例如,在插入模式中,如果輸入字元串 10dd,該字元串會寫入臨時文件,如圖 1 所示。
但是,如果處於命令模式,字元串 10dd 將從臨時文件的當前游標所在位置開始刪除 10 行,如圖 2 所示。
另一個例子是游標移動。在命令模式下,鍵 H、J、K 和 L 分別將游標向左、下、上和右移動,如圖 3 所示。而在插入模式下,則顯示這些字母。
通常,UNIX 用戶使用 vi,或稱為 Editor Macros(Emacs)的編輯器,它由 Richard Stallman 在 1976 年編寫。但是許多人選擇 vi,因為它是輕量級的,啟動更快,佔用的內存也更少。
Vim 是什麼?
Vim,即改進的 Vi,是由 Bram Moolenaar 在 1991 年編寫的 vi 的擴展版本。該版本最初是為 Amiga 計算機設計的,但 1992 年時在 UNIX 中迅速傳播開來。與 vi 一樣,Vim 基於命令模式和插入模式,它是一個文本用戶界面(TUI)— 如圖 4 所示。
但是它提供了一種命名為 gVim 的圖形用戶界面(GUI)— 如圖 5 所示。
Vim 命令
Vim 中的內部命令與 vi 編輯器中的內部命令類似。表 1 提供了 Vim 中的游標移動命令。
命令 | 動作 |
---|---|
h | 將游標向左移動 |
j、加號 (+)、Enter 或 Return | 將游標向下移動 |
k、減號 (-) | 將游標向上移動 |
l | 將游標向右移動 |
} | 將游標移動到當前段落的末尾 |
{ | 將游標移動到當前段落的開頭 |
) | 將游標移動到當前句子的末尾 |
( | 將游標移動到當前句子的開頭 |
^ | 移動到當前行的第一個非空字元 |
$ | 移動到當前行末尾 |
0 (zero) | 移動到當前行開頭 |
w or W | 移動到下一單詞的開頭 |
b or B | 移動到上一單詞的開頭 |
e | 移動到下一單詞的末尾 |
H | 移動到屏幕的第一行 |
M | 移動到屏幕的中間一行 |
L | 移動到屏幕的最後一行 |
G | 移動到文件末尾 |
gg | 移動到文件開頭 |
:n | 移動到行 n |
表 2 顯示了用於刪除文本的 Vim 命令。
命令 | 動作 |
---|---|
d | 刪除選中的區域 |
dd | 刪除整個當前行 |
10dd | 刪除從當前行開始的 10 行, |
dw | 從當前位置向前刪除單詞 |
db | 從當前游標位置左邊開始向後刪除單詞 |
dl | 刪除當前游標位置的字元 |
dh | 刪除當前游標位置左邊的字元 |
d0 (zero) | 刪除當前游標位置到行開頭之間的單詞 |
D | d$ | 刪除從當前游標位置開始的整個行 |
x | 刪除游標當前位置的字元 |
X | 刪除游標當前位置之前的字元 |
表 3 提供了其他幾個有用的 Vim 命令。
命令 | 動作 |
---|---|
ih | 進入插入模式並在當前游標處插入 |
I | 進入插入模式並在當前行的開始處插入 |
a | 進入插入模式並追加到游標後面 |
A | 進入插入模式並追加到當前行末尾 |
c | 更改選中的區域 |
C | 更改從游標當前位置開始的整個行 |
o | 在游標當前所在行下方創建一個新空行,並將游標移動到這一新空行的開頭 |
O | 在游標當前所在行的上方創建一個新空行,並將游標移動到這一新空行的開頭 |
r | 替換游標當前位置的單個字元 |
R | 替換從游標當前位置開始的多個字元,並在退出插入模式時結束 |
<Esc> | 退出插入或可視模式 |
> or <Tab> | 向選中區域右邊縮進 |
< | 向選中區域左邊縮進 |
v | 啟動時突出顯示字元 |
V | 啟動時突出顯示的整個行 |
yy | 將當前行移動/複製到內存 |
10yy | 將從當前行開始的 10 行移動/複製到內存 |
p | 粘貼複製或剪切的文本;如果字元被複制(yw dw 或 D),就在游標當前位置之後粘貼這些字元。如果複製的是行,就在游標當前所在的行下面粘貼這些行 |
P | 作用和 p 一樣,但是它在游標當前位置的前面粘貼字元,在游標當前所在行上面粘貼行 |
u | 撤消最後的更改 |
<Ctrl> R | 重做 |
/<pattern> | 搜索已找到的下一個模式,並將游標放在已找到的模式的開頭 |
?<pattern> | 搜索已找到的上一個模式,並將游標放在已找到的模式的開頭 |
n | 重複上一次的搜索 |
N | 重複上一次的搜索,但搜索的方向相反 |
!<cmd> | 在 Vim 會話外執行 <cmd> |
行模式
儘管廣泛使用的是命令和插入模式,但行模式同樣重要,只是有時候沒有被充分理解和使用。行模式進入行編輯器,使您可以在一行或多行上處理命令。考慮到 vi 以 ex 編輯器命名,所以它只適合進入 ex 編輯器的行模式。
要從命令模式進入行模式,輸入冒號(:)即可。然後將游標移動到窗口左下角。繼續輸入時,所有文本都會出現在窗口底部的冒號後面。單擊 Enter,開始計算和執行行模式命令。如果確定不執行在行模式下輸入的行,則單擊 Escape 返回到命令模式。
使用編輯器的行模式時,請記住兩種命令樣式。首先,在輸入命令時,vi 或 Vim 按原樣執行命令。如果執行的命令與修改數據有關,當前行就是目標。但是,使用第二種方法可以提供行數以處理指定的行。要輸入行,請在冒號後面輸入要處理的行數或行範圍,並用逗號(,)分隔開始和結束範圍。
例如,如果只處理行 23,那麼命令以 :23 開始。如果要修改 2319 到 3819 之間的行,則輸入 :2319,3819。要處理從行 45 開始到文件結尾之間的一個命令,需要將最後行的參數替換為美元符號($)— 即 :45,$。
以下命令只是可以在行模式下執行的最基本命令:
注意:如果提供一個參數,而且存在 <file name>,編輯器不會覆蓋現有文件的數據。
注意:如果數據已修改,則需要先保存文件再退出編輯器,否則將導致文件未被保存。
vi 與 Vim 之間的差異
儘管 vi 與 Vim 的外觀相同,但它們確實存在區別。以下只是這兩個功能強大的文本編輯器之間的幾點區別:
在圖 8 所示的例子中,使用 tar 命令存檔 4 個 ASCII 文本文件,然後使用 Vim 選擇存檔中的第二個文件進行編輯。
如何獲得 Vim?
了解 vi 與 Vim 之間的一些增強與區別後,您可能會說:“我需要 Vim!從哪裡獲得它呢?”告訴您一個好消息:Vim 已經出現在幾個不同的操作系統中。
以下是幾個移植了 Vim 的平台:
Windows 中的 Vim
在上一小節,您已經知道可以在 Windows 使用 Vim,您現在會說:“我真的可以在 Windows 中使用 Vim 嗎?真是太好了!”是的,確實可以!
只需下載最新版的 Vim(當前版本是 7.1),將它移植到 Windows 即可,下載地址是 Vim Web 站點。最簡單的方法是下載自動安裝的可執行文件並執行它,然後按步驟操作。安裝后,右鍵單擊一個文件,單擊 Edit with Vim(如下面的圖 11 所示),便可以在 Windows 的 Vim 中編輯文件了。
在 Windows 計算機中安裝 Vim 后,就可以享受 Vim 提供的好處了,同時可以考慮拋棄 Windows 中的其他文本編輯器了。
結束語
vi 編輯器是 UNIX 中的文本編輯器的前身,Vim 是它的延續。閱讀本文後,希望您能學到有關 Vim 編輯器的一些新知識,並通過它的功能使您的工作更輕鬆。Vim 作為一種簡單的編輯器,已經成為一個穩定和健壯的應用程序,廣泛用於 UNIX 以及大多數其他操作系統中。如果您不經常使用 Vim,在了解它的詳細功能之後,您肯定會認為 Vim 是最好的編輯器。(責任編輯:A6)
[火星人 ] 對話 UNIX: 新改進的 Vim 編輯器已經有651次圍觀