Vim/Vi(以下簡稱vi)是Linux上一款功能非常強大的文本編輯器,用於編輯配置文件或者寫shell腳本效率還是蠻高的。其實vi水挺深的,通常我們只要學習以下它的基本用法就行了,有興趣的朋友可以去讀下《Learning the VI Editor》這本書。雖然說只是學習vi的基本用法,但是一下子接受這麼多的命令,三兩下就暈了,所以就有必要記錄下,下面是我個人學習vi的一些小小總結。
首先我們要知道vi的工作模式以及模式之間的切換,vi有三個工作模式:命令模式、插入模式和編輯模式。用vi打開文件,默認是進入命令模式。在命令模式我們可以執行一些命令,比如插入命令、定位命令、刪除命令等。在命令模式執行插入命令後,vi將進入插入模式,在插入模式下,我們輸入的任何字符都將作爲文本寫到文件中,按esc可以退回到命令模式。在命令模式按:(冒號)可以進入編輯模式,在編輯模式我們可以執行一些編輯模式下的命令,通常我們命令模式下要執行編輯模式的命令時,我們直接用“:+命令”;同樣地,按esc可以退回到命令模式。掌握了vi的工作模式後,接下來將分類(按命令功能粗糙地分下類)介紹vi的一些基本用法。
1、插入命令
a,在光標後面插入文本;
A,在本行行尾插入文本;
i,在光標前面插入文本;
I,在本行行首插入文本;
o,在光標下一行插入文本;
O,在光標上一行插入文本。
2、定位命令
$,移動至行尾;
0(注意這裏是數字0),移動至行首;
H,移動至本屏首行;
M,移動至本屏中間行;
L,移動至本屏最後一行;
gg,移動至文件第一行;
G,移動至文件最後一行;
nG,移動至第n行;
:n移動至第n行。
3、刪除命令
x,刪除光標所在處字符;
nx,刪除光標所在處後n個字符;
dd,刪除光標所在行;
ndd,刪除n行;
dG,刪除光標所在行到文件末尾的內容;
D,刪除光標所在處到行尾;
:n1,n2d,刪除指定範圍的行。
4、複製與剪切命令
yy、Y,複製當前行;
nyy、nY,複製當前行以下的n行;
dd,剪切當前行;
ndd,剪切當前行以下的n行;
p,粘貼到當前行的下面;
P,粘貼到當前行的上面。
5、替換與取消命令
r,取代光標所在處字符;
R,從光標所在處開始替換字符,按esc結束替換;
u,取消上一步操作。
6、保存退出命令
:wq,退出保存;
:wq!,退出並強制保存(當沒有文件的寫權限時可以強制寫入,但是該命令只對root和文件所有者有效);
:q!,強制退出,不保存;
:w,保存,不退出;
:w [文件名],把文件另存到指定的文件中。
7、搜索與替換命令
/string,向前搜索string指定的字符串,由於linux是嚴格區分大小寫的,所以如果要實現忽略大小寫搜索,可以執行:set ic命令,如果要取消忽略大小寫可以執行:set noic命令。執行搜索命令後,按n可以跳到該字符下一個出現位置,按N可以跳到上一個出現位置;
:%s/oldString/newString/g,在全文範圍內將oldString替換成newString;
:n1,n2s/oldString/newString/g,在n1至n2行將oldString替換成newString;
注:上面的這兩種替換不會提醒用戶確認,如果需要提醒用戶,則可以把上面兩個命令最後的g改成c。根據上面的替換命令可以衍生出註釋的命令,我們知道在linux配置文件和shell腳本中,註釋是用#,而且我們還知道^表示的是行首,所以這裏提供兩個註釋命令:
:n1,n2s/^/#/g,這個可以註釋n1到n2行;
:n1,n2s/^#//g,這個可以取消n1到n2行註釋。
:ab [string1] [string2],輸入string1回車後會替換成string2;
:unab [string1],取消string1字符替換。
8、其他
:r [文件名],將指定文件內容導入到光標處;
:map [快捷鍵] [觸發命令],定義命令快捷鍵;
:unmap [快捷鍵],取消快捷鍵定義;
注::map定義快捷鍵時輸入快捷鍵的方式,例如要定義的快捷鍵時ctrl+p,則應該輸入ctrl+v+p;同樣,如果是ctrl+a,則應該輸入ctrl+v+a。
:i [命令],在vi中執行系統命令;
:set nu,設置行號;
:set nonu,取消行號設置。
提醒:上面的編輯模式設置動作(如,設置行號、設置快捷鍵等),只在本次vi編輯當中有效,如果要使這些設置一直有效,則需要把這些編輯模式的設置命令寫入vi的配置文件中去(我用的是Ubuntu系統,我的vi配置文件是宿主目錄下的.viminfo文件,這個文件默認是空的,這裏需要注意的是,vi的配置文件中註釋不是用#而是用“),注意將這些編輯模式設置命令寫入配置文件時去掉我們在系統中執行命令時前面加的冒號(:)。