編輯神器Vi介紹及常用命令
vi 編輯器是 Linux 和 Unix 上最基本的文字編輯器,工作在字元模式下。由於不需要圖
形介面,vi 是效率很高的文字編輯器。儘管在 Linux 上也有很多圖形介面的編輯器可用,
但 vi 在系統和伺服器管理中的功能是那些圖形編輯器所無法比擬的。
vi 編輯器通常被簡稱為 vi,而 vi 又是“Visual interface”的簡稱。它在 Linux 上的地
位就像 Edit 程式在 DOS 上一樣。它可以執行輸出、刪除、查詢、替換、塊操作等眾多文字
操作,而且使用者可以根據自己的需要對其進行定製,這是其他編輯程式所沒有的。
vi 編輯器並不是一個排版程式,它不像 Word 或 WPS 那樣可以對字型、格式、段落
等其他屬性進行編排,它只是一個文字編輯程式。沒有選單,只有命令,且命令繁多。vi
有 3 種基本工作模式:命令列模式、文字輸入模式和末行模式。
Vim 是 vi 的加強版,比 vi 更容易使用。vi 的命令幾乎全部都可以在 vim 上使用。
2 vi 工作模式
vi 有三種基本工作模式:命令模式、文字輸入模式、末行模式。
2.1 命令模式
任何時候,不管使用者處於何種模式,只要按一下 ESC 鍵,即可使 Vi 進入命令模式;我
們在 shell 環境(提示符為$)下輸入啟動 Vi 命令,進入編輯器時,也是處於該模式下。在該
模式下,使用者可以輸入各種合法的 Vi 命令,用於管理自己的文件。此時從鍵盤上輸入的任
何字元都被當做編輯命令來解釋,若輸入的字元是合法的 Vi 命令,則 Vi 在接受使用者命令之
後完成相應的動作。但需注意的是,所輸入的命令並不在螢幕上顯示出來。若輸入的字元不
是 Vi 的合法命令,Vi 會響鈴報警。
2.2 編輯模式
在命令模式下輸入插入命令 i、附加命令 a 、開啟命令 o、修改命令 c、取代命令 r 或
替換命令 s 都可以進入文字輸入模式。在該模式下,使用者輸入的任何字元都被 Vi 當做檔案
內容儲存起來,並將其顯示在螢幕上。在文字輸入過程中,若想回到命令模式下,按鍵 ESC
即可。
2.3 末行模式
在命令模式下,使用者按“:”鍵即可進入末行模式下,此時 Vi 會在顯示視窗的最後一
行(通常也是螢幕的最後一行)顯示一個“:”作為末行模式的提示符,等待使用者輸入命令。
多數檔案管理命令都是在此模式下執行的(如把編輯緩衝區的內容寫到檔案中等)。末行命
令執行完後,Vi 自動回到命令模式。例如 :sp newfile
則分出一個視窗編輯 newfile 檔案。如果要從命令模式轉換到編輯模式,可以鍵入命
令 a 或者 i;如果需要從文字模式返回,則按 Esc 鍵即可。在命令模式下輸入“:”即可切
換到末行模式,然後輸入命令。
vi 基本操縱
3.1 進入編輯模式
命令含義
i 和 Ii 在游標前插入,I 在行首插入
a 和 Aa 在游標後插入,A 在行末插入
o 和 Oo 在游標所在行下一行插入,O 在游標所在行上一行插入
3.2 移動游標
命令含義
h游標向左移動
j游標向下移動
k游標向上移動
l游標向右移動
H、M、L游標移動到到可見螢幕第一行(H)、中間行(M)、最後一行(L)
^和$^移動到行首,$移動到行末
G 和 ggG 文件最後一行,gg 文件第一行
ctrl+f、ctrl+b向前翻屏、向後翻屏
ctrl+d、ctrl+u向前半屛、向後半屛
{ 和 }{向上移動一段,}向後移動一段
w 和 b向前移動一個單詞,向後移動一個單詞
3.3 刪除命令
命令含義
X 和 xx 刪除游標後一個字元,X 刪除游標前一個字元,包含游標位置字元
dd 和 n dddd 刪除所在行,5 dd 刪除指定行數
d0 和 Dd0 刪除游標前本行所有內容,D 刪除游標後本行所有內容,包含游標位置字元
dw刪除游標所在位置的字,包含光表所在位置字元
3.4 撤銷命令
命令含義
u一步一步撤銷
ctrl + r反撤銷
3.5 重複命令
命令含義
.重複執行上一次操作的命令
3.6 複製貼上
命令含義
yy 和n yy 和 y$y^yy 複製當前行,5 yy 複製 5 行
p在游標所在位置向下新開一行貼上
3.7 選擇文字
命令含義
v 和 Vv 選擇單個字元,V 選擇整行
<<和>>選擇文字之後,向左縮排,向右縮排
3.8 查詢替換
命令含義
命令模式下,r 和 Rr 替換當前字元,R 替換游標後的字元
末行模式下,/ + strn 查詢下一個,N 查詢前一個
末行模式下,%s/abc/123/g將檔案中所有 abc 替換為 123
末行模式下,1, 10s/abc/123/g將第一行至第 10 行之間的 abc 替換成 123
4.1 開打檔案分屏
命令含義
vim -On file1 file2 ...使用大寫 O 引數進行垂直分屏,n 為陣列,不得小於檔案數
vim -on file1 file2 ...使用小寫 o 引數進行水平分屏
ctrl+w c關閉當前視窗
ctrl+w q關閉當前視窗,如果只剩最後一個,則退出 vim