新聞中心
Vim 是從 vi 發(fā)展出來的一個(gè)文本編輯器。代碼補(bǔ)完、編譯及錯(cuò)誤跳轉(zhuǎn)等方便編程的功能特別豐富,在程序員中被廣泛使用。和Emacs并列成為類Unix系統(tǒng)用戶最喜歡的編輯器,本篇文章重點(diǎn)為大家分享一下Vim的高級(jí)使用方法。

公司主營業(yè)務(wù):網(wǎng)站設(shè)計(jì)、做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出萬安免費(fèi)做網(wǎng)站回饋大家。
1. 準(zhǔn)備工作
首先,我們打開 VIM,輸入一段文本,用于今天的演示:
this is a test
2. 查找替換
按幾下 ESC 進(jìn)入 Normal 模式,輸入以下命令::%s/ /\r/g/ ?;剀嚭蟮玫降男Ч缦拢?/p>
this
is
a
test
解說:這條命令的作用是,將文章中所有的空格替換為回車。幾乎所有的編輯器都支持查找替換,但并不是所有的編輯器都支持把空格替換為回車,因此這個(gè)功能在許多別的編輯器里做起來是比較繁瑣的。
3. 行的拼接
剛才我們把一行文字打碎為 4 行了,那如何再把它們拼接起來呢?當(dāng)然,我們可以通過前面說的查找替換的方式,將回車再替換為空格,實(shí)現(xiàn)行的拼接。但是,這里我們用的是另一種方式。
按幾下 ESC 進(jìn)入 Normal 模式,然后輸入這段命令:ggVG。gg 表示跳到文本開頭,V 表示進(jìn)入行選擇模式,G 表示選擇到文章末尾。通過這 3 條命令,總共 4 個(gè)按鍵,我們選中了整篇文章。
然后,按下冒號(hào) : 進(jìn)入命令模式,狀態(tài)欄上出現(xiàn)::'字樣,在它后面輸入 j,然后回車,可以看到,整篇文章又被拼接起來了,整個(gè)操作包括回車只按了 7 次鍵:
this is a test
4. 復(fù)制粘貼與重復(fù)動(dòng)作
按幾下 ESC 確認(rèn)當(dāng)前處在 Normal 模式下,然后按 yy,即可將當(dāng)前行復(fù)制到默認(rèn)寄存器中(相當(dāng)于剪貼板)。然后按下 12p,VIM 將執(zhí)行粘貼動(dòng)作 12 次,屏幕上出現(xiàn)了 13 行這樣的字符:
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
解說:在 VIM 中,復(fù)制和粘貼操作相當(dāng)快捷。另外,VIM 中大部分命令都可以通過在命令前加數(shù)字重復(fù)若干遍。
5. 列操作
接下來我們把每一行的開頭第一個(gè)字母改為大寫。
按幾下 ESC 確認(rèn)當(dāng)前處在 Normal 模式下,然后按 gg 跳到第一行,按下 Ctrl + v進(jìn)入列選擇模式(如果你按下 Ctrl + v 沒能進(jìn)入列選擇模式,請(qǐng)看這里),然后按 G,跳到文章最后一行,此時(shí)你應(yīng)該看到,文本的第一列被選中了,而且只選中了第一列。按下 U 鍵,可以看到,每行的第一個(gè)字母都變?yōu)榇髮懥?。提示:選中文本后按 u 可以將文本變?yōu)樾?,選中文本后按 ~ 可以翻轉(zhuǎn)原有的大小寫。
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
然后,我們?cè)诿啃械那懊婕由弦粋€(gè)星號(hào)。按下 gg 跳到第一行,按 Ctrl + v 進(jìn)入列選擇模式,再按 G,選中全文的第一列,然后按 I,進(jìn)入列插入狀態(tài),輸入星號(hào) *,再按下 ESC,你會(huì)看到,所有行之前都出現(xiàn)了一個(gè)星號(hào):
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
解說:對(duì)于編寫程序的人來說,把一段代碼批量注釋掉是一個(gè)很常見的操作,使用列插入可以很容易地做到這一點(diǎn)。另外,列選擇后按 x 刪除被選中的塊,可以批量地解除注釋。
6. 宏的錄制
接下來,我們要將文本的偶數(shù)行修改為:This is another test。由于所有的偶數(shù)行都要進(jìn)行同樣的操作,因此我們把這個(gè)操作錄制下來,然后重復(fù)播放若干遍,就能很快地完成這項(xiàng)工作了。
首先,按幾下 ESC 確認(rèn)處在 Normal 模式下,再按下 gg 跳到第一行,準(zhǔn)備開始操作。我們首先按下 q 鍵,然后再按一個(gè)其它字母,將這個(gè)宏錄制到該字母對(duì)應(yīng)的寄存器下。例如我們這里使用 m 寄存器,則按 qm。此時(shí) VIM 狀態(tài)欄出現(xiàn)“recording”字樣,表明已經(jīng)進(jìn)入了錄制狀態(tài)。
然后,我們把第二行的 a 修改為 another。首先按 j 進(jìn)入第二行,然后按 $ 跳到行末,再按兩下 b 往前跳兩個(gè)單詞,此時(shí)光標(biāo)停在字母 a 上。然后我們按下 caw鍵刪除 a 并進(jìn)入插入狀態(tài),然后輸入 another ,按 ESC 回到 Normal 狀態(tài),按 j 進(jìn)入下一行,整個(gè)操作步驟就完成了。最后,我們?cè)侔匆幌?q,結(jié)束該宏的錄制。
接下來我們播放這個(gè)宏,完成整個(gè)操作步驟。在鍵盤上輸入 1000@m,表示將 m 寄存器里的宏播放 1000 次,馬上可以看到,文章中所有偶數(shù)行的 a 都變成了 another。
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
解說:雖然我們指定播放 1000 次,但事實(shí)上,執(zhí)行到第 6 次的時(shí)候,光標(biāo)挪到了屏幕最下方,于是執(zhí)行過程就自動(dòng)停止了。因此,在批量操作的時(shí)候,我們可以指定足夠大的數(shù)字,而不用擔(dān)心出現(xiàn)問題。
另外,修改 a 的時(shí)候,我們跳到行末后再使用 b 命令以單詞為單位跳轉(zhuǎn),而沒使用 h 一個(gè)字母一個(gè)字母往回挪,我們使用caw 修改整個(gè)單詞,而不使用 s 命令刪除單個(gè)字母并進(jìn)入 Insert模式。這些細(xì)節(jié)可以保證錄制得到的宏更具有一般性。
7. 行尾塊操作
注:本章由 Jason Han 網(wǎng)友貢獻(xiàn),感謝他來信指出滇狐原先對(duì)于行尾塊操作理解的錯(cuò)誤。
下面,我們要在每行的尾部都添加一個(gè)感嘆號(hào)。之前我們?cè)诿啃蓄^部添加一個(gè)星號(hào)的時(shí)候,用的是 Ctrl-V 列操作?,F(xiàn)在要在行尾添加,能不能繼續(xù)用列操作呢?直觀上似乎是不行的,每行的長(zhǎng)度不一樣,行尾位置參差不齊,如何使用列模式往行尾添加?xùn)|西呢?
事實(shí)上,Vim 提供了一種特殊的列模式,叫做行尾塊模式,也就是說,我們是可以通過 Ctrl-V模式來選中長(zhǎng)度不同的行的行尾,然后對(duì)行尾作統(tǒng)一操作的,操作步驟如下:
按下 gg 跳到第一行,按 Ctrl-V 進(jìn)入列選擇模式,再按 G,選中全文的第一列,然后按下 $,進(jìn)入行尾塊模式,按下 A,進(jìn)入塊插入狀態(tài),輸入星號(hào) !,再按下 ESC,你會(huì)看到,所有行尾部都出現(xiàn)了一個(gè)感嘆號(hào):
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
8. 點(diǎn)命令
接下來,我們?cè)诿啃械哪┪布由弦粋€(gè)小于號(hào) 。
由于我們需要在每行后面添加新行,因此我們無法使用塊選擇方式批量添加小于大于號(hào)。使用宏錄制的方式是可以做到這點(diǎn)的,但操作稍嫌繁瑣了一些。使用點(diǎn)命令,可以非常方便地做到這一點(diǎn)。
先按幾下 ESC 確認(rèn)當(dāng)前出于 Normal 模式,然后使用 gg 跳到第一行,按 A 進(jìn)行行尾插入,輸入 ,最后 ESC 回到 Normal 狀態(tài),第一行修改就完成了。
然后,我們按 j 進(jìn)入下一行,也就是第三行,再按 .,可以看到,第三行尾部也出現(xiàn)了小于號(hào),并且自動(dòng)添加了第四行的大于號(hào)。反復(fù)按j.j.j. ,直到每一行都完成了這個(gè)編輯動(dòng)作為止。
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
解說:點(diǎn)命令的作用是,重復(fù)最近一次所做的編輯操作。由于在第一行里做的操作是行尾添加并插入新行,因此在第三行(原先的第二行)重復(fù)這個(gè)動(dòng)作的時(shí)候,也會(huì)在行尾添加同樣的字符。點(diǎn)命令功能不如宏強(qiáng)大,但它使用起來比宏簡(jiǎn)便,因此也有著廣泛的用途。
網(wǎng)站標(biāo)題:細(xì)說Vim的高級(jí)使用方法
當(dāng)前URL:http://fisionsoft.com.cn/article/ccejjhg.html


咨詢
建站咨詢
