vi編輯器的兩種工作模式:命令模式和輸入模式。
在命令模式下,vi將擊鍵解釋為命令。有許多vi命令,如可以使用vi命令來存儲一個文件、離開vi、移動光標到一個文件的不同位置或者修改、重排、刪除、替換、查找文本。在輸入模式下按Esc鍵則回到命令模式。
在輸入模式下,可以在光標位置插入鍵入的字符。由於vi啟動後默認處於命令模式(這一點與大多數其他系統上的文本編輯器不同),所以需要首先切換到輸入模式才可以進行文本輸入工作。從命令模式切換到輸入模式可以使用如下命令:
命令
動作
a
將在光標所在位置之後插入文本
A
將在光標所在行末插入文本
i
將在光標所在位置之前插入文本
I
將在光標所在行的第一個非空字符前插入文本
o
將在光標所在行的下一行開始插入文本
O(大寫的o)
將在光標所在行的上一行開始插入文本
(1) 定位光標
編輯文本時,需要把光標定位到適當的位置,從而在這些位置上插入附加的文本、刪除文本、改正錯誤、修改單詞或者在已經存在文件的末尾再加上一段。在命令模式下選擇光標位置的命令稱為光標定位命令。
命令
動作
j 或下箭頭
向下移動一行
k或上箭頭
向上移動一行
h或左箭頭
向左移動一個字符
l或右箭頭
向右移動一個字符
空格鍵
向右移動一個字符
Enter或+
移動到下一行的第一個非空字符
減號-
移動到上一行的第一個非空字符
0(零)
移動到當前行的起始位置
$
移動到當前行的末尾位置
^
移動到當前行的第一個非空字符
Ctrl加d
向下半頁
Ctrl加f
向下一頁
Ctrl加u
向上半頁
Ctrl加b
向上一頁
H
移動至屏幕第一行
M
移動至屏幕當前顯示的那些行的中間一行
L
移動至屏幕最後一行
G
移動至文件或緩沖區的最後一行
w
移動到下一個單詞的起始位置
b
移動到當前單詞的起始位置或移動到上一個單詞的起始位置
e
移動到當前單詞的末尾位置或移動到下一個單詞的末尾位置
W
和w相似(w以標點符號和空格區分單詞,W以空格區分單詞)
B
和b相似(b以標點符號和空格區分單詞,B以空格區分單詞)
(
移動到上一句的起始位置(句子是以!.?三種符號來界定)
)
移動到下一句的起始位置
{
移動到上一段的起始位置(段落是以段落間的空白行界定)
}
移動到下一段的起始位置
可以在一些命令的前面加上一個數字表示移動的范圍。如:3j代表向下移動3行,5w代表移動到後面第5個單詞的起始位置。
在G前面加一個數字可以直接移動到指定的行,如:1G代表移動到文件或緩沖區的第一行,10G代表移動到文件或緩沖區的第10行。
(2) 搜索文本
如果要通過浏覽每一行來找到文件中的某個單詞、某個短語,或者某個數字,那是很困難的。和多數編輯器和字處理軟件一樣,vi也提供搜索命令。
命令
動作
/string
前向查找字符串(到達文件尾後從文件頭重新開始)
?string
後向查找字符串(到達文件頭後從文件尾重新開始)
n
配合/和?使用,重復一次
N
配合/和?使用,反方向重復一次
:s/str1/str2
用str2替換當前行上的第一個str1
:s/str1/str2/g
用str2替換當前行上所有的str1
:%s/str1/str2/g
用str2替換當前緩沖區中所有的str1
(3) 保存文件
前面已經介紹為如何在退出vi時保存文件,在不退出vi的情況下我們也可以保存文件。
命令
動作
:w
保存緩沖區到vi正在編輯的文件中
:w filename
保存緩沖區到指定的文件中
:w! filename
強制重寫已經存在的指定文件
(4) 插入文本
要在文件中插入文本,在輸入模式下可以直接插入,在命令模式下需要首先切換到輸入模式。
(5) 刪除文本
對一個文件進行修改可能會涉及到刪除文本,刪除字符必須處於命令模式,如果在輸入模式下輸入刪除字符命令,慈銘的字母將作為字符顯示在緩沖區文件中。一旦發生這種情況,按Esc鍵回到命令模式後再按u來撤銷這次錯誤的操作。
命令
動作
x
刪除光標所在位置的字符
dd
刪除光標所在行
D
刪除光標所在位置到所在行結尾的所有字符
s
刪除光標所在位置的字符,並進入輸入模式
S
刪除光標所在行,並進入輸入模式
與定位光標部分的命令類似,也可以在某些刪除命令的前面加上一個數字。如:4x代表刪除4個字符,8dd代表刪除8行。
也可以指定一個要刪除的行的范圍,方法如下:按冒號鍵,輸入想刪除的兩個行號(包括首尾兩行),兩個行號之間用逗號隔開,再按d鍵,最後按Enter鍵。例如要刪除從第12行到第36行的所有行,只要鍵入:12,36d並按Enter。
(6) 修改文本
經常面對的另一個編輯任務是替換某個字符或某個字符串。
命令
動作
r
替換單個字符
R
進入替換狀態,所輸入字符串會替換原有字符串
u
只撤銷上一次編輯
U
撤銷在當前行的全部修改
使用R命令時如果替換已經進行到行尾,不會換行,而是在行尾繼續追加。