vim常用實(shí)用用法總結(jié)
vim乃Linux下相當(dāng)牛掰一文本處理神器也,是vi編輯器的升級(jí)版,全稱叫Vi IMproved. 而vi則是Visual Interface的縮寫,他們處理都是ASCII碼字符數(shù)據(jù),熟練使用vim絕對(duì)是你成為L(zhǎng)inux大牛不可或缺的本領(lǐng),所謂千里之行,始于足下。
我這里寫的比較啰嗦,但都是非常常用的用法,如果覺(jué)得看著太費(fèi)勁不夠直觀,可以看另一篇博文 VIM命令大全, 這里有更多的常用的實(shí)用的用法;當(dāng)然如果你不想上網(wǎng)查,vim自帶的幫助文檔也有的查,直接輸入vim然后回車,會(huì)進(jìn)入vim編輯器,此時(shí)輸入:help就可以進(jìn)入幫助文檔,輸入 :help command 還可以查處子命令的用法, 例如我想查看 d這個(gè)命令的作用和用法,直接:help d就可以啦,授人以魚(yú)不如以漁嘛。。
下面就本人學(xué)習(xí)過(guò)程中一些非常常用到的比較實(shí)用的用法做一下總結(jié),
首先vim有三種模式: 編輯模式,輸入模式,末行模式
編輯模式: 也叫命令模式,用vim打開(kāi)文件后默認(rèn)進(jìn)入的就是此模式,在此模式下,可以組合使用vim的一些命令,完成對(duì)文件的快捷操作,
字符移動(dòng)操作:
h, j, k, l 四個(gè)鍵分別對(duì)應(yīng) 左,下, 上, 右 操作, 這個(gè)左右比較好理解,h在左邊,l在右邊,j, k在中間表上下,但是我們正常慣用右手的人就有點(diǎn)不好理解,反正我是這樣感覺(jué)的,正常按我的思維左邊的表示上,右邊就下了,比較順手,所以我推測(cè)開(kāi)發(fā)vi的人估計(jì)是個(gè)左撇賴子,很多有成就的牛逼的人都是左撇賴子,愛(ài)因斯坦。。。所以沒(méi)事開(kāi)發(fā)一下右腦也是有好處滴,, 關(guān)于這個(gè)馬哥也有個(gè)助記的方法,就是j代表japan小日本鬼子,k代表korea棒子,在地圖上棒子在鬼子的上面,所以k是向上的箭頭,j是向下的箭頭,當(dāng)然了不管是什么方法只要能幫助記憶就中,黑貓白貓嘛
單詞移動(dòng)操作:
w word 向后移動(dòng)一個(gè)單詞,光標(biāo)定位在詞首
e end of a word 向后移動(dòng)一個(gè)單詞,光標(biāo)定位在詞尾
b backword 意思是向前移動(dòng)一個(gè)單詞
句子跳轉(zhuǎn):
) 跳到下一句
( 跳到上一句
段落間跳轉(zhuǎn)
} 下一段
{ 上一段
句子間跳轉(zhuǎn)和段落跳轉(zhuǎn)不太常用,配置文件等的句子段落劃分可能跟我們想的會(huì)有不同啦。
行間跳轉(zhuǎn)
1G / gg 跳轉(zhuǎn)至第一行
G 跳轉(zhuǎn)至最后一行
#G #為正整數(shù),跳轉(zhuǎn)至第#行
行內(nèi)跳轉(zhuǎn)
^ (shift + 6) 跳至行首(行首第一個(gè)非空字符),這個(gè)托字符在Linux中也是個(gè)神一樣的存在,你會(huì)經(jīng)常和打打交道
0 對(duì),就是數(shù)字0,光標(biāo)跳至絕對(duì)行首(真正的行首)
$ 這個(gè)美元可以跳到行尾,和^一樣也是一個(gè)神一樣的存在,各個(gè)地方你都會(huì)看到她的倩影
跳轉(zhuǎn)進(jìn)階用法:
上面的這些個(gè)移動(dòng)都是一個(gè)一個(gè)的移動(dòng)的,如果要移動(dòng)的位數(shù)比較多,恰好又不在行首或行尾,一個(gè)一個(gè)點(diǎn),豈不是很麻煩?莫怕,作者早為你想到了,比如我想一下向上移動(dòng)6個(gè)字符,按下6h,效果刷刷的,想一下向后跳8個(gè)詞?按下8w,你懂的,那好吧不哆嗦,以此類推…… 3e, 4b, 5j, 7k, 9) …… 自己好好玩去吧,記住他并在使用的時(shí)候經(jīng)常的想起他并經(jīng)常的使用他,一般人我可不告訴他。當(dāng)你基本脫離上下左右箭頭的時(shí)候,你基本也就離大牛不遠(yuǎn)啦。
輸入模式:
要從命令模式進(jìn)入輸入模式,方法有很多,根據(jù)需要來(lái)使用,注意看我后面標(biāo)出的字母縮寫
- i insert 在當(dāng)前光標(biāo)之前插入
- a append 在當(dāng)前光標(biāo)之后插入
- I 大寫在行首插入
- A 大寫在行尾插入
- o 在當(dāng)前光標(biāo)所在行的下面一行插入
- I 在當(dāng)前光標(biāo)所在行的上面一行插入
在任何模式下按下ESC鍵可以退出當(dāng)前模式,回到命令模式,已經(jīng)是命令模式的則還在命令模式。
編輯是可以了,復(fù)制呢,答案是肯定的,首先確定回到命令模式,
按下yy y是yanK的縮寫,整行內(nèi)容就被復(fù)制到剪切板中了,然后把光標(biāo)移動(dòng)到你想的位置按下p剛把剛才復(fù)制的那行粘貼到你光標(biāo)所在行的下面一行,P大寫則粘貼至上面一行,p是paste的縮寫是也; 剪切的話dd是也,當(dāng)前行的內(nèi)容刪除而后會(huì)放在剪切板中,粘貼方法相同。
再有一個(gè)比較高端的用法可以在命令模式下按下v(按字符選?。┗蛘遃(按行選?。? 此時(shí)會(huì)進(jìn)入可視化模式,移動(dòng)你的光標(biāo)哈哈,就像在windows下拖動(dòng)你的鼠標(biāo)一樣,然后復(fù)制剪切隨便你啦。。
還有個(gè)值得提一下的用法,就是如果想翻屏的話,可以用
- ctrl + f (forward) 向后翻一屏,
- ctrl + b (backword) 向前翻一屏,
- ctrl + d (down) 向后翻半屏
- ctrl + u (down) 向前翻半屏
實(shí)用命令 d delete 刪除命令,可以和其他命令組合刪除詞,字符,行,等
例如dh向左刪除當(dāng)前字符,dl向右刪除當(dāng)前字符,dj刪除當(dāng)前行和下面一行,dk刪除當(dāng)前行下上面一行,dw刪除向后一個(gè)單詞,de, db …
當(dāng)然你還可以用 d1h, d2l, d#w, d#b(#用你需要的正整數(shù)代替) … ,如果需要重復(fù)之前的操作,只需按下” . “即可,需要重復(fù)多次就按下多次 “. “
和d稍微不同的還有一個(gè)命令c,這個(gè)命令是哪個(gè)單詞縮寫,我也不知道,用法和d用法類似,不同的是刪除之后直接會(huì)進(jìn)入insert編輯模式, 相當(dāng)于d執(zhí)行后又按下i
常用命令大概這么多了,還有個(gè)比較實(shí)用的用法:窗口的拆分: 當(dāng)你編輯一個(gè)文檔而又需要參照此文檔其他章節(jié)的內(nèi)容又不想再打開(kāi)一個(gè)文檔的時(shí)候就派上用場(chǎng)了, 這個(gè)功能類似于word里的窗口拆分,在word2007中,點(diǎn) “視圖” 菜單 –> “拆分“即可。在編輯文檔的時(shí)候還是非常有用的。
在vim下,按下ctrl + w 然后按s, (split 縮寫)則可以實(shí)現(xiàn)水平拆分,按下 v (vertical 縮寫)則可實(shí)現(xiàn)垂直拆分,具體效果說(shuō)是說(shuō)不清楚的,自己體驗(yàn)一下吧。 需要兩個(gè)窗口切換則先按下ctrl + w 然后按相應(yīng)的上下左右→即可。需要退出的話:q 退出當(dāng)前,:qall退出所有 :!qall 強(qiáng)制退出所有(這是末行模式命令下面會(huì)提到)
還有一個(gè)打開(kāi)文檔的技巧,vim + /path/to/file (相對(duì)或絕對(duì)路徑定位到你要打開(kāi)的文件) 直接打開(kāi)到最后一行, vim +# /path/to/file 打開(kāi)在第#行,
又想起來(lái)一個(gè)命令的撤消: 保證你在命令模式下,按一下u則可以撤消一步操作,按多次撤消多步操作,vim默認(rèn)可以保存50次,這個(gè)值可以通過(guò)編輯/etc/vimrc 中 set history=50那一行的值改變,如果手賤撤消多了也8怕,按ctrl + r (restore) 可以恢復(fù)你的撤消, 按大寫的U可以撤消所有操作。
末行模式:
末行模式下的功能更加強(qiáng)勁,在命令模式下按下冒號(hào):可以進(jìn)入末行模式,:w 保存編輯內(nèi)容,write , :q 退出quit :wq 保存并退出 前面加!表示強(qiáng)制 :!q強(qiáng)制退出,:x = :wq ,
搜索功能: :/text (text為你要查找的字符串) 向后查找, :?text 向前查找, 查找到的內(nèi)容會(huì)高亮顯示, 按n(next)會(huì)和你查找的方向相同找下一個(gè),按大寫N則向相反方向查找下一個(gè)
窗口屬性定義:
- :set ai | autoindent 開(kāi)啟自動(dòng)縮進(jìn)(寫腳本時(shí)就老開(kāi)心啦,寫出來(lái)那叫一個(gè)漂亮)
- :set nu (number) 顯示行號(hào)
- : set nonu (no number) 取消顯示行號(hào)
- : set ic | ignorecase 忽略大小寫
- :set hlsearch (highlight search) 搜索高亮顯示
- :set sm| showmatch 不要想歪了,顯示匹配的括號(hào)
所有的設(shè)置前面加個(gè)no就可以取消顯示了,當(dāng)然你的設(shè)置只對(duì)當(dāng)前編輯的文檔生效,如果想永久生效可以寫入/etc/vimrc配置文件 或~/.vimrc文件,~代表家目錄
好了,下面上一盤壓軸大菜:查找和替換,這個(gè)東西以后編輯配置文件老有用啦,我來(lái)舉個(gè)例子,有圖有真相:
LOOK 1:
原文如下,現(xiàn)在我要把所有的zhishen 后面都加上一個(gè)must,
輸入如下命令
- :%s/\(shen\)/\1 must/g
解釋一下這行命令,: 進(jìn)入末行模式,% 代表全局查找,s (search)查找命令,紅色標(biāo)出的一對(duì)括號(hào),\ 表示轉(zhuǎn)義,即使用括號(hào)原來(lái)的意思,因?yàn)槔ㄌ?hào)在Linux下有其特有的功能的,后面的\1代表引用前面括號(hào)內(nèi)的內(nèi)容,g (global)表示全局,當(dāng)然后面還可以加i (ignore case)忽略大小寫,如果有需要的話,/ 是每個(gè)字段之間的分隔符,為了方便區(qū)分,某些情況下你可以替換成# 或 @ 都可以。
當(dāng)然像這種簡(jiǎn)單的正則表達(dá)式,只有一個(gè)引用內(nèi)容的括號(hào)可以省略不寫,引用也可以直接用一個(gè)簡(jiǎn)單的&來(lái)解決,于是上面的命令也可以這樣寫:
:%s/shen/& must/g 效果是一樣的 或者 :%s#shen#& must#g
LOOK 2:
這里我以apache的配置文件httpd.conf為例,比如從102行到109行的配置我不想啟用了現(xiàn)在,我就可以在每一行前面加個(gè)#注釋掉即可,
:.,109s/^/#/g 這里我把光標(biāo)移動(dòng)到102行,前面的.代表當(dāng)前行,整個(gè)表示從當(dāng)前行到第109行所有開(kāi)頭都用#替換,也可以這樣寫 :102,109s/^/#/g 或者 :.,+7s/^/#/g 再或者 :102,+7s/^/#/g 都是一樣的效果。
LOOK 3:
這個(gè)情景我想把102行到109行移動(dòng)到93行的下面
:102,109d 回車,代表刪除102到109行,但是這里的刪除是先放到剪切板中的,所以下面的你懂啦,把光標(biāo)移動(dòng)94行,按下一個(gè)大寫的P,哈哈就全部粘貼過(guò)來(lái)啦。
就寫這么多了吧,這些都是可能經(jīng)常能用到的功能。vim的功能非常之強(qiáng)大,首先把為些常用的基礎(chǔ)的學(xué)會(huì)吧,再稍微高級(jí)一點(diǎn)的常用功能可以看一下我的另一篇博文《VIM命令大全》,自己結(jié)合說(shuō)明慢慢摸索,基本這些差不多夠平常工作用了。