VIM:Visual Interface Improved;vim是一個(gè)類似于vi的著名的功能強(qiáng)大、高度可定制的文本編輯器,在Vi的基礎(chǔ)上改進(jìn)和增加了很多特性。
vim在工作過(guò)程中有三種模式:命令模式(command mode) ,編輯模式(edit mode),末行模式(extended command mode).
①命令模式:鍵盤操作中常被理解為編輯命令。
②編輯模式:在文本文件中進(jìn)行輸入內(nèi)容。
③末行模式:vim內(nèi)置的命令行接口,執(zhí)行vim的內(nèi)置命令。
vim的使用:
首先要學(xué)會(huì)的模式的切換:

①ESC鍵:從編輯模式切換到命令模式
②若欲從命令模式切換到編輯模式,可采用以下的命令:
? ? ? ?i: insert, 在光標(biāo)所在處輸入
? ? ? ?I:在當(dāng)前光標(biāo)所在行的行首輸入
? ? ? a: append, 在光標(biāo)所在處后面輸入
? ? ? ?A:在當(dāng)前光標(biāo)所在行的行尾輸入
? ? ? ?o: 在當(dāng)前光標(biāo)所在行的下方打開(kāi)一個(gè)新行
? ? ? ?O:在當(dāng)前光標(biāo)所在行的上方打開(kāi)一個(gè)新行
按下上述的按鍵后,同時(shí)在屏幕的左下方會(huì)出現(xiàn)INSERT字樣
eg:

③命令模式轉(zhuǎn)換到末行模式:直接輸入“:”,即可在窗口的左下角顯示

④末行模式傳喚到命令模式敲擊ESC即可。
注:編輯模式不能直接轉(zhuǎn)換至末行模式。
⑤退出文件:
(1)在末行模式下退出
;q ? ? ?退出
:q! ?不保存退出
:wq ? ? ? 保存退出
:x ? 保存退出
:wq! ? ?強(qiáng)制保存退出
:w/PATH/TO/SOMEWHERE ? 保存至具體路徑
? r ?filename ? ? 讀文件內(nèi)容到當(dāng)前文件中
? w ?filename ? ?將當(dāng)前文件內(nèi)容寫入另一個(gè)文件
? ?!command ? ? 執(zhí)行命令
? ? r!command ? ?讀入命令的輸出
注:在命令模式下保存退出的快捷鍵:ZZ
⑥光標(biāo)移動(dòng):
? ?hjkl:分別表示左右下上
? ?w: ?下一個(gè)單詞詞首
? e: ? 當(dāng)前單詞或下個(gè)單詞詞尾
? b:當(dāng)前單詞或前一個(gè)單詞詞尾
#{h|j|k|l|w|e|b} ? ?:先按給定數(shù)字后再按特定字母表示跳動(dòng)#次。
⑦行內(nèi)移動(dòng):
? ?^ : ? 行首第一個(gè)非空白字符
? ?0:絕對(duì)行首
? ?$: ?絕對(duì)行尾
#G : ?直接跳轉(zhuǎn)至第#行
G ?: ? 最后一行
IG ?| ? gg ? :二者都表示第一行
vim的編輯命令
? x: 刪除光標(biāo)處的字符
? #x: 刪除光標(biāo)處起始的#個(gè)字符
? xp: 交換光標(biāo)所在處的字符及其后面字符的位置
? ~:轉(zhuǎn)換大小寫
? J:刪除當(dāng)前行后的換行符
?d: 刪除命令,可結(jié)合光標(biāo)跳轉(zhuǎn)字符,實(shí)現(xiàn)范圍刪除
? ? ? ? ? 可組合:dw,db,de,d0,d^,d$(與D的效果相同)
?dd:刪除光標(biāo)所在行 ? ? ? #dd:多行刪除
? ?p:緩沖區(qū)存的如果為整行,則粘貼當(dāng)前光標(biāo)所在行的下方;否則,則粘貼至當(dāng)前光標(biāo)所在處的后面
? ?P:緩沖區(qū)存的如果為整行,則粘貼當(dāng)前光標(biāo)所在行的上方;否則,則粘貼至當(dāng)前光標(biāo)所在處的前面
? ? y:yank,復(fù)制,結(jié)合光標(biāo)跳轉(zhuǎn)字符使用,復(fù)制跳轉(zhuǎn)范圍內(nèi)的字符
#y:復(fù)制從當(dāng)前行向下#行的內(nèi)容 ? ? ? ? ? ? ? ? ? ?Y:yy ? ? 復(fù)制行
? ? ? 改變命令(c, change) ?c: 修改后切換成插入模式,結(jié)合光標(biāo)跳轉(zhuǎn)字符使用,修改跳轉(zhuǎn)光標(biāo)范圍內(nèi)的字符——w,b,e,$,0,^ ? ? ? ? ? ? ? ? ? ?cc|C:刪除光標(biāo)所在處的正行而后轉(zhuǎn)換為輸入
vim中的末行模式:
①內(nèi)容界定:startpos,endpos
# ? ? ?:第#行 ? ? ? #,# ? ?:從左側(cè)的第#行到右側(cè)的第#行 ? ? ? . ? ? :當(dāng)前行 ? ? $ ? :最后一行
%? :全文? ? ? ? ? #,+# ?:從左側(cè)#表示的起始行,加上右側(cè)#表示的行數(shù),2,+3 表示2到5行
/pat1/,/pat2/ ?從第一次被pat1模式匹配到的行開(kāi)始,一直到第一次被 pat2匹配到的行結(jié)束
②查找 :/PATTERN:從當(dāng)前光標(biāo)所在處向文件尾部查找 ? ??PATTERN:從當(dāng)前光標(biāo)所在處向文件首部查找 ? ? ? ?n:與命令同方向 ? N:與命令反方向
③查找并替換
s: 在擴(kuò)展模式下完成查找替換操作 ? ? ? 格式:s/要查找的內(nèi)容/替換為的內(nèi)容/修飾符
可以用正則表達(dá)式查找
替換為的內(nèi)容:不能使用模式,但可以使用\1, \2, ...等后向引用符號(hào);還可以使用“&”引用前面查找時(shí)查找到的整個(gè)內(nèi)容
修飾符:i: 忽略大小寫 ? ? g: 全局替換;默認(rèn)情況下,每一行只替換第一次出現(xiàn) ? ? ?gc:全局替換,每次替換前詢問(wèn)
多文件模式:
:next 下一個(gè) ? ?:prev前一個(gè) ? ?:first 第一個(gè) ? ? :last 最后一個(gè)
:wall 保存所有 ? ? ?:qall退出所有 ? ? ? ?:wqall ? 保存所有文件并退出
多窗口模式:
多文件 ? ?vim -o|-O FILE1 FILE2 ...
-o: 水平分割 ? ? ? ? -O: 垂直分割
在窗口間切換:Ctrl+w, Arrow
單文件窗口分割:
Ctrl+w,s: split, 水平分割 ? ? Ctrl+w,v: vertical, 垂直分割
ctrl+w,q:取消相鄰窗口 ? ? ctrl+w,o:取消全部窗口
:wqall退出
練習(xí):? ?
復(fù)制/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符
? ? ? %s@^[[:space:]]\+@@g
復(fù)制/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令為/tmp/functions的每行開(kāi)頭為空白字符的行的行首添加一個(gè)#號(hào)
? ? ? %s@^#[[:space:]]\+.*@#&@g