Linux vi編輯器常見命令的使用
http://c.biancheng.net/cpp/html/2735.html
工作模式
進一步瞭解 vi 之前先來了解一下 vi 的工作模式,vi 有三種工作模式:
1) 普通模式
由Shell進入vi編輯器時,首先進入普通模式。在普通模式下,從鍵盤輸入任何字元都被當作命令來解釋。普通模式下沒有任何提示符,輸入命令後立即執行,不需要回車,而且輸入的字元不會在螢幕上顯示出來。
普通模式下可以執行命令、儲存檔案、移動游標、貼上複製等。
2) 編輯模式
編輯模式主要用於文字的編輯。該模式下使用者輸入的任何字元都被作為檔案的內容儲存起來,並在螢幕上顯示出來。
3) 命令模式
命令模式下,使用者可以對檔案進行一些高階處理。儘管普通模式下的命令可以完成很多功能,但要執行一些如字串查詢、替換、顯示行號等操作還是必須要進入命令模式。
注意:有些教程中稱有兩種工作模式,是把命令模式合併到普通模式。
工作模式切換:
- 在普通模式下輸入 i(插入)、c(修改)、o(另起一行) 命令時進入編輯模式;按 esc 鍵退回到普通模式。
- 在普通模式下輸入冒號(:)可以進入命令模式。輸入完命令按回車,命令執行完後會自動退回普通模式。
提示:如果不確定當前處於哪種模式,按兩次 Esc 鍵將回到普通模式。
退出 vi 編輯器
一般在命令模式下退出 vi 編輯器。
退出命令 | 說明 |
---|---|
q | 如果檔案未被修改,會直接退回到Shell;否則提示儲存檔案。 |
q! | 強行退出,不儲存修改內容。 |
wq | w 命令儲存檔案,q 命令退出 vi,合起來就是儲存並退出。 |
ZZ | 儲存並退出,相當於 wq,但是更加方便。 |
退出之前,你也可以在 w 命令後面指定一個檔名,將檔案另存為新檔案,例如:
w filename2
將當前檔案另存為 filename2。
注意:vi 編輯檔案時,使用者的操作都是基於緩衝區中的副本進行的。如果退出時沒有儲存到磁碟,則緩衝區中的內容就會被丟失。
移動游標
為了不影響檔案內容,必須在普通模式(按兩次 Esc 鍵)下移動游標。使用下表中的命令每次可以移動一個字元:
命令 | 描述 |
---|---|
k | 向上移動游標(移動一行) |
j | 向下移動游標(移動一行) |
h | 向左移動游標(移動一個字元) |
l | 向右移動游標(移動一個字元) |
兩點提醒:
- vi 是區分大小寫的,輸入命令時注意不要鎖定大寫。
- 可以在命令前邊新增一個數字作為字首,例如,2j 將游標向下移動兩行。
當然,還有很多其他命令來移動游標,不過記住,一定要在普通模式(按兩次 Esc 鍵)下。
命令 | 說明 |
---|---|
0 或 | | 將游標定位在一行的開頭。 |
$ | 將游標定位在一行的末尾。 |
w | 定位到下一個單詞。 |
b | 定位到上一個單詞。 |
( | 定位到一句話的開頭,句子是以 ! . ? 三種符號來界定的。 |
) | 定位到一句話的結尾。 |
{ | 移動到段落開頭。&&&&&& |
} | 移動到段落結束。&&&&&&&&& |
[[ | 回到段落的開頭處。&&&&&&&&&& |
]] | 向前移到下一個段落的開頭處。&&&&&&&&&& |
n| | 移動到第 n 列(當前行)。 |
1G | 移動到檔案第一行。 |
G | 移動到檔案最後一行。 |
nG | 移動到檔案第 n 行。 |
:n | 移動到檔案第 n 行。 |
H | 移動到螢幕頂部。 |
nH | 移動到距離螢幕頂部第 n 行的位置。 |
M | 移動到螢幕中間。 |
L | 移動到螢幕底部。 |
nL | 移動到距離螢幕底部第 n 行的位置。 |
:x | x 是一個數字,表示移動到行號為 x 的行。 |
控制命令
有一些控制命令可以與 Ctrl 鍵組合使用,如下:
命令 | 描述 |
---|---|
CTRL+d | 向前滾動半屏 |
CTRL+f | 向前滾動全屏 |
CTRL+u | 向後滾動半屏 |
CTRL+b | 向後滾動整屏 |
CTRL+e | 向上滾動一行 |
CTRL+y | 向下滾動一行 |
CTRL+I | 重新整理螢幕 |
編輯檔案
切換到編輯模式下才能編輯檔案。有很多命令可以從普通模式切換到編輯模式,如下所示:
命令 | 描述 |
---|---|
i | 在當前游標位置之前插入文字 |
I | 在當前行的開頭插入文字 |
a | 在當前游標位置之後插入文字 |
A | 在當前行的末尾插入文字 |
o | 在當前位置下面建立一行 |
O | 在當前位置上面建立一行 |
刪除字元
下面的命令,可以刪除檔案中的字元或行:
命令 | 說明 |
---|---|
x | 刪除當前游標下的字元 |
X | 刪除游標前面的字元 |
dw | 刪除從當前游標到單詞結尾的字元 |
d^ | 刪除從當前游標到行首的字元 |
d$ | 刪除從當前游標到行尾的字元 |
D | 刪除從當前游標到行尾的字元 |
dd | 刪除當前游標所在的行 |
可以在命令前面新增一個數字字首,表示重複操作的次數,例如,2x 表示連續兩次刪除游標下的字元,2dd 表示連續兩次刪除游標所在的行。
建議各位讀者多加練習上面的命令,再進一步深入學習。
修改文字
如果你希望對字元、單詞或行進行修改,可以使用下面的命令:
命令 | 描述 |
---|---|
cc | 刪除當前行,並進入編輯模式。 |
cw | 刪除當前字(單詞),並進入編輯模式。 |
r | 替換當前游標下的字元。 |
R | 從當前游標開始替換字元,按 Esc 鍵退出。 |
s | 用輸入的字元替換當前字元,並進入編輯模式。 |
S | 用輸入的文字替換當前行,並進入編輯模式。 |
貼上複製
vi 中的複製貼上命令:
命令 | 描述 |
---|---|
yy | 複製當前行 |
nyy | 複製n行 |
yw | 複製一個字(單詞) |
nyw | 複製n行 |
p | 將複製的文字貼上到游標後面 |
P | 將複製的文字貼上到游標前面 |
高階命令
下面的一些命令雖然看起來有些古怪,但是會讓你的工作更有效率,如果你是 vi 重度使用者,就瞭解一下吧。
命令 | 說明 |
---|---|
J | 將當前行和下一行連線為一行 |
<< | 將當前行左移一個單位(一個縮排寬度) |
>> | 將當前行右移一個單位(一個縮排寬度) |
~ | 改變當前字元的大小寫 |
^G | Ctrl+G組合鍵可以顯示當前檔名和狀態 |
U | 撤銷對當前行所做的修改 |
u | 撤銷上次操作,再次按 'u' 恢復該次操作 |
:f | 以百分號(%)的形式顯示當前游標在檔案中的位置、檔名和檔案的總行數 |
:f filename | 將檔案重新命名為 filename |
:w filename | 儲存修改到 filename |
:e filename | 開啟另一個檔名為 filename 的檔案 |
:cd dirname | 改變當前工作目錄到 dirname |
:e # | 在兩個開啟的檔案之間進行切換 |
:n | 如果用 vi 打開了多個檔案,可以使用 :n 切換到下一個檔案 |
:p | 如果用 vi 打開了多個檔案,可以使用 :n 切換到上一個檔案 |
:N | 如果用 vi 打開了多個檔案,可以使用 :n 切換到上一個檔案 |
:r file | 讀取檔案並在當前行的後邊插入 |
:nr file | 讀取檔案並在第 n 行後邊插入 |
文字查詢
如果希望進行全檔案搜尋,可以在普通模式(按兩次 Esc 鍵)下輸入 / 命令,這時狀態列(最後一行)出現"/"並提示輸入要查詢的字串,回車即可。
/ 命令是向下查詢,如果希望向上查詢,可以使用 ? 命令。
這時,輸入 n 命令可以按相同的方向繼續查詢,輸入 N 命令可以按相反的方向繼續查詢。
搜尋的字串中可以包含一些有特殊含義的字元,如果希望搜尋這些字元本身,需要在前面加反斜槓(\)。
字元 | 說明 |
---|---|
^ | 匹配一行的開頭 |
. | 匹配一個字元 |
* | 匹配0個或多個字元 |
$ | 匹配一行的結尾 |
[ ] | 匹配一組字元 |
如果希望搜尋某行中的單個字元,可以使用 f 或 F 命令,f 向上搜尋,F 向下搜尋,並且會把游標定位到匹配的字元。
也可以使用 t 或 T 命令:t 命令向上搜尋,並把游標定位到匹配字元的前面;T 命令向下搜尋,並把游標定位到匹配字元的後面。
set 命令
set 命令可以對 vi 編輯器進行一些設定。使用 set 命令需要進入命令模式。
命令 | 說明 |
---|---|
:set ic | 搜尋時忽略大小寫。 |
:set ai | 設定自動縮排(自動對齊)。 |
:set noai | 取消自動縮排(自動對齊)。 |
:set nu | 顯示行號。 |
:set sw | 設定縮排的空格數,例如,將縮排空格數設定為4::set sw=4。 |
:set ws | 迴圈搜尋:如果直到檔案末尾也沒有查詢到指定字元,那麼會回到開頭繼續查詢。 |
:set wm | 設定自動換行,例如,設定距離邊際2個字元時換行::set wm=2 。 |
:set ro | 將檔案型別改為只讀。 |
:set term | 輸出終端型別。 |
:set bf | 忽略輸入的控制字元,如 BEL(響鈴)、BS(退格)、CR(回車)等。 |
執行命令
切換到命令模式,再輸入 ! 命令即可執行 Linux 命令。
例如,儲存檔案前,如果希望檢視該檔案是否存在,那麼輸入
:! ls
即可列出當前目錄下的檔案。
按任意鍵回到 vi 編輯器。
文字替換
切換到命令模式,再輸入 s/ 命令即可對文字進行替換。語法為:
:s/search/replace/g
search 為檢索的文字,replace 為要替換的文字,g 表示全域性替換。
幾點提示
vi 編輯器的使用講解完畢,但是請記住下面幾點:
- 輸入冒號(:)進入命令模式,按兩次 Esc 鍵進入普通模式。
- 命令大小寫的含義是不一樣的。
- 必須在編輯模式下才能輸入內容。