Vi: 简易教程
插入模式、命令模式、ex 模式 ...
讓我們先打開 Vi :
| $ vi file1 file2 |
此時,您會發現您面對如下窗口:
圖?4.4.?VIM 開始
您現在是在打開的第一個文件的最前面,并處于 命令模式 。在此模式下,您不能往文件中插入文本。要插入文本,您需要先切換到 插入模式 。
以下是一些插入文本的快捷方式:
-
a 和 i :在當前光標前或后插入文本(A 和 I 分別在當前行行末或行首插入文本);
-
o 和 O :在當前行下或上插入文本。
在插入模式中,您會在屏幕底部看到 -- 插入 -- 字符串(提示您所處的模式)。只有在這個模式下您才能插入文本。按下 Esc 鍵就能返回命令模式。
在插入模式中,您可以使用 Backspace 和 DEL 鍵刪除文本。方向鍵讓您能夠在命令模式和插入模式下在文本中移動。在命令模式下,要移動還有其他的按鍵組合,我們將在下文中提及。
在命令模式下按 : 鍵可以進入 ex 模式。此時,屏幕左下角光標前面會出現一個 : 。Vi 會把您在 Enter 前輸入的任何東西當作一條 ex 命令。如果您刪除了您輸入的命令和 : ,您將返回命令模式,且光標將返回到它在文本中原來的位置。
在命令模式下輸入 :w 可以保存對某個文件的更改。要保存到另外的文件,請輸入 :w <文件名> 。
處理緩沖區
要在從命令行上輸入的各個文件之間移動,鍵入 :next 就能移動到下一個文件,鍵入 :prev 就能移動到前一個文件。您也可以輸入 :e <file_name> ,如果該文件已打開則將移動到該文件,否則則打開該文件。您也可以使用補全。
同 Emacs 一樣,您可以在屏幕上同時顯示多個緩沖區,只要輸入 :split 命令。
鍵入 Ctrl+w?j 移到下面的緩沖區,鍵入 Ctrl+w?k 移到上面的緩沖區。您也可以用上下方向鍵替換 k 或 j 。命令 :close 隱藏當前緩沖區,命令 :q 關閉當前緩沖區。
請注意,如果您要隱藏或關閉的緩沖區未曾保存修改,該命令不會執行,且 Vi 將提示:
No write since last change (use ! to override)
要強制關閉或隱藏,請鍵入 :q! 或 :close! 。
編輯文本和移動命令
編輯模式下,Vi 除了 Backspace 和 DEL 鍵,還有很多其他命令用于刪除、復制、粘貼和替換文本。以下對命令的討論分成兩個部分:要執行的動作及其作用域。動作有:
-
c :替換(Change )。編輯器刪除請求的文本,并返回到插入模式。
-
d :刪除(Delete );
-
y :復制(“Yank ”)。我們將在下一節討論。
-
. :重復最后一次操作。
作用域定義了該命令所作用的字符。
-
h 、j 、k 、l :分別表示左、下、上、右邊一個字符。[11 ]
-
e 、b 、w :分別表示當前單詞的末尾以及開頭,和下一個單詞的開頭。
-
^ 、0 、$ :分別表示本行的首個非空白符、當前行行首、和當前行行末。
-
f<x> :至下一個字符 <x> 處。例如,fe 將光標移動到下一個 e 字符處。
-
/<字符串> , ?<字符串> :分別表示下一個和前一個字符串或正則表達式 <字符串> 處。例如,/foobar 將光標移動到下一個單詞 foobar 處。
-
{ 、} :至本段開頭和結尾;
-
G 、H :至文件末尾,以及至屏幕開頭。
上述每個“作用域 ”字符或移動命令都可以前綴重復次數。對于 G (原意為移至文件末尾),前綴表示要移動到文件中的行號。由此,您可以使用各種組合。
例如:
-
6b :向后移動 6 個單詞;
-
c8fk :刪除直到字符 k 第八次出現處,然后進入插入模式;
-
91G :移動到文件中 91 行;
-
d3$ :從當前位置刪除到行末,并刪除接下來的兩行。
不過這些命令大都不太直觀,所以最好的方法是勤加訓練。不過您還是應該承認“只要輕輕幾按,就一切 OK ”并非虛言。
剪切,復制,粘貼
在 Vi 中復制命令我們已經在上文中看到過了:y 命令。要剪切,只要用 d 命令。一共有 27 個剪切板位置可以保存剪切的文本:其中一個為匿名,另外 26 個以 26 個小寫字符命名。
要使用匿名剪貼板,您只要“按原樣 ”輸入命令。因此,y12w 命令將把光標后的 12 個單詞復制到匿名剪貼板[12 ] 。如果您想要剪切的話,只要輸入 d12w 。
要使用 26 個命名剪貼板之一,請在命令之前輸入 "<x> ,其中 <x> 給出您想使用的剪貼板的名字。因此,要將上述 12 個單詞復制到剪貼板 k ,請輸入 "ky12w 。要剪切,請輸入 "kd12w 。
要粘貼匿名剪貼板中的內容,請使用 p 或 P 命令(意為粘貼(Paste) )。它們將分別插入到光標之后以及之前。要粘貼命名粘貼板中的內容,請用 "<x>p 或 "<x>P (例如,"dp 將把剪貼板 d 中的內容粘貼到光標之后)。
舉例說明:
圖?4.5.?VIM,復制文本塊之前
我們將:
-
復制該句話的前 6 個單詞到(比方說)剪貼板 r :"ry6w [13 ] ;
-
移動到下面的緩沖區 file2 :Ctrl+w?j ;
-
在光標前粘貼剪貼板 r 中的內容:"rp 。
我們就得到了需要的結果,如圖?4.6 “VIM,復制了文本塊之后” 所示。
圖?4.6.?VIM,復制了文本塊之后
查找文本非常簡單:在命令模式,您只要鍵入 / 接著輸入想要查找的字符串,并按 Enter 鍵。例如:/party 會從當前光標所在位置尋找字符串 party 。按下 n 將移至下一個匹配處,到達文件末尾后會重新從開頭找起。要向前尋找,請用 ? 代替 / 。
退出 Vi
退出命令是 :q (正如我們以上所見,該命令實際上只是關閉當前緩沖區,不過如果這就是唯一打開的緩沖區,那您就將退出 Vi )。通常,您只會編輯一個文件,因此要退出,您只要鍵入:
-
:wq 就能保存并退出(更快的方式是 ZZ ),或者
-
:q! 退出而不保存。
請注意,如果您打開了好幾個緩沖區,:wq 只保存當前緩沖區并關閉它。
[11 ] 與 dl (刪除下一個字符)相當的快捷鍵是 x ;dh 的快捷鍵是 X ;dd 刪除當前行。
[12 ] 不過,這僅當光標位于第一個單詞開頭!
[13 ] y6w 字面上的含義是:“復制 6 個單詞 ”。
總結
- 上一篇: vi编辑器命令大全
- 下一篇: ubuntu添加dvd光盘源