帶你領(lǐng)略VIM的高級(jí)操作

導(dǎo)讀 此文收集了一些簡(jiǎn)單的 VIM 操作献雅,這些操作要么其它普通文本編輯器不能完成,要么完成起來(lái)很慢塌计。通過(guò)本文的介紹挺身,可以堅(jiān)定初學(xué)者學(xué)習(xí) VIM 的決心與信心。如果你有什么好的易于演示的簡(jiǎn)易技巧锌仅,歡迎留言章钾。另外,如果沒(méi)有明確說(shuō)明热芹,本文中的提到的按鍵均是大小寫(xiě)敏感的贱傀。例如,文中提到“按下 G”時(shí)伊脓,你按的鍵應(yīng)該是“Shift + G”府寒。

1. 準(zhǔn)備工作
首先,我們打開(kāi) VIM报腔,輸入一段文本株搔,用于今天的演示:

this is a test

2. 查找替換
按幾下ESC進(jìn)入 Normal 模式,輸入以下命令::%s/ /\r/g 纯蛾∠朔浚回車(chē)后得到的效果如下:

this
is
a
test

解說(shuō):這條命令的作用是,將文章中所有的空格替換為回車(chē)翻诉。幾乎所有的編輯器都支持查找替換炮姨,但并不是所有的編輯器都支持把空格替換為回車(chē)捌刮,因此這個(gè)功能在許多別的編輯器里做起來(lái)是比較繁瑣的。

3. 行的拼接
剛才我們把一行文字打碎為 4 行了舒岸,那如何再把它們拼接起來(lái)呢绅作?當(dāng)然,我們可以通過(guò)前面說(shuō)的查找替換的方式蛾派,將回車(chē)再替換為空格棚蓄,實(shí)現(xiàn)行的拼接。但是碍脏,這里我們用的是另一種方式。

按幾下 ESC進(jìn)入 Normal 模式稍算,然后輸入這段命令:ggVG典尾。gg 表示跳到文本開(kāi)頭,V 表示進(jìn)入行選擇模式糊探,G 表示選擇到文章末尾钾埂。通過(guò)這 3 條命令,總共 4 個(gè)按鍵科平,我們選中了整篇文章褥紫。

然后,按下冒號(hào) : 進(jìn)入命令模式瞪慧,狀態(tài)欄上出現(xiàn)::'< ,'>字樣髓考,在它后面輸入j,然后回車(chē)弃酌,可以看到氨菇,整篇文章又被拼接起來(lái)了,整個(gè)操作包括回車(chē)只按了 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

解說(shuō):在 VIM 中耕魄,復(fù)制和粘貼操作相當(dāng)快捷。另外,VIM 中大部分命令都可以通過(guò)在命令前加數(shù)字重復(fù)若干遍驹碍。

5. 列操作
接下來(lái)我們把每一行的開(kāi)頭第一個(gè)字母改為大寫(xiě)。

按幾下 ESC確認(rèn)當(dāng)前處在 Normal 模式下碴裙,然后按gg跳到第一行稠炬,按下 Ctrl + v進(jìn)入列選擇模式(如果你按下 Ctrl + v 沒(méi)能進(jìn)入列選擇模式,請(qǐng)看這里)屯烦,然后按G坷随,跳到文章最后一行房铭,此時(shí)你應(yīng)該看到,文本的第一列被選中了温眉,而且只選中了第一列缸匪。按下 U 鍵,可以看到类溢,每行的第一個(gè)字母都變?yōu)榇髮?xiě)了凌蔬。提示:選中文本后按 u 可以將文本變?yōu)樾?xiě),選中文本后按 ~ 可以翻轉(zhuǎn)原有的大小寫(xiě)闯冷。

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):(這個(gè)操作我用rehat7沒(méi)成功拧咳,可以使用這個(gè)替代:%s/^/*

*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

解說(shuō):對(duì)于編寫(xiě)程序的人來(lái)說(shuō)伯顶,把一段代碼批量注釋掉是一個(gè)很常見(jiàn)的操作,使用列插入可以很容易地做到這一點(diǎn)呛踊。另外砾淌,列選擇后按 x 刪除被選中的塊,可以批量地解除注釋谭网。

6. 宏的錄制
接下來(lái)汪厨,我們要將文本的偶數(shù)行修改為:This is another test。由于所有的偶數(shù)行都要進(jìn)行同樣的操作愉择,因此我們把這個(gè)操作錄制下來(lái)劫乱,然后重復(fù)播放若干遍,就能很快地完成這項(xiàng)工作了锥涕。

首先衷戈,按幾下 ESC確認(rèn)處在 Normal 模式下,再按下 gg跳到第一行层坠,準(zhǔn)備開(kāi)始操作殖妇。我們首先按下 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 上口四。然后我們按下cw鍵刪除 a 并進(jìn)入插入狀態(tài),然后輸入another 秦陋,按 ESC回到 Normal 狀態(tài)窃祝,按j進(jìn)入下一行,整個(gè)操作步驟就完成了踱侣。最后,我們?cè)侔匆幌?q大磺,結(jié)束該宏的錄制抡句。

接下來(lái)我們播放這個(gè)宏,完成整個(gè)操作步驟杠愧。在鍵盤(pán)上輸入 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

解說(shuō):雖然我們指定播放 1000 次,但事實(shí)上绳瘟,執(zhí)行到第 6 次的時(shí)候雕憔,光標(biāo)挪到了屏幕最下方,于是執(zhí)行過(guò)程就自動(dòng)停止了糖声。因此斤彼,在批量操作的時(shí)候,我們可以指定足夠大的數(shù)字蘸泻,而不用擔(dān)心出現(xiàn)問(wèn)題琉苇。

另外,修改 a 的時(shí)候悦施,我們跳到行末后再使用 b 命令以單詞為單位跳轉(zhuǎn)并扇,而沒(méi)使用 h 一個(gè)字母一個(gè)字母往回挪,我們使用cw 修改整個(gè)單詞抡诞,而不使用 s 命令刪除單個(gè)字母并進(jìn)入 Insert模式穷蛹。這些細(xì)節(jié)可以保證錄制得到的宏更具有一般性土陪。

7. 行尾塊操作
注:本章由 Jason Han 網(wǎng)友貢獻(xiàn),感謝他來(lái)信指出滇狐原先對(duì)于行尾塊操作理解的錯(cuò)誤俩莽。

下面旺坠,我們要在每行的尾部都添加一個(gè)感嘆號(hào)。之前我們?cè)诿啃蓄^部添加一個(gè)星號(hào)的時(shí)候扮超,用的是Ctrl-V列操作∪∪校現(xiàn)在要在行尾添加,能不能繼續(xù)用列操作呢出刷?直觀上似乎是不行的璧疗,每行的長(zhǎng)度不一樣,行尾位置參差不齊馁龟,如何使用列模式往行尾添加?xùn)|西呢崩侠?

事實(shí)上,Vim 提供了一種特殊的列模式坷檩,叫做行尾塊模式却音,也就是說(shuō),我們是可以通過(guò) Ctrl-V模式來(lái)選中長(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)命令
接下來(lái)诺凡,我們?cè)诿啃械哪┪布由弦粋€(gè)小于號(hào) < 。每行下面插入一個(gè)新行践惑,寫(xiě)上一個(gè)大于號(hào) >腹泌。

由于我們需要在每行后面添加新行,因此我們無(wú)法使用塊選擇方式批量添加小于大于號(hào)尔觉。使用宏錄制的方式是可以做到這點(diǎn)的凉袱,但操作稍嫌繁瑣了一些。使用點(diǎn)命令,可以非常方便地做到這一點(diǎn)专甩。

先按幾下ESC 確認(rèn)當(dāng)前出于 Normal 模式钟鸵,然后使用gg跳到第一行,按 A進(jìn)行行尾插入涤躲,輸入< 棺耍,然后按下回車(chē),輸入>种樱,最后 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!<>

解說(shuō):點(diǎn)命令的作用是恰矩,重復(fù)最近一次所做的編輯操作无宿。由于在第一行里做的操作是行尾添加并插入新行,因此在第三行(原先的第二行)重復(fù)這個(gè)動(dòng)作的時(shí)候枢里,也會(huì)在行尾添加同樣的字符。點(diǎn)命令功能不如宏強(qiáng)大蹂午,但它使用起來(lái)比宏簡(jiǎn)便栏豺,因此也有著廣泛的用途。

原文來(lái)自: http://strongit.blog.51cto.com/10020534/1737269
本文地址: http://www.reibang.com/p/4bf7476f0fac

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豆胸,一起剝皮案震驚了整個(gè)濱河市奥洼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晚胡,老刑警劉巖灵奖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異估盘,居然都是意外死亡瓷患,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)遣妥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)擅编,“玉大人,你說(shuō)我怎么就攤上這事“” “怎么了谭贪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锦担。 經(jīng)常有香客問(wèn)我俭识,道長(zhǎng),這世上最難降的妖魔是什么洞渔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任套媚,我火速辦了婚禮,結(jié)果婚禮上痘煤,老公的妹妹穿的比我還像新娘凑阶。我一直安慰自己,他們只是感情好衷快,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布宙橱。 她就那樣靜靜地躺著,像睡著了一般蘸拔。 火紅的嫁衣襯著肌膚如雪师郑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天调窍,我揣著相機(jī)與錄音宝冕,去河邊找鬼。 笑死邓萨,一個(gè)胖子當(dāng)著我的面吹牛地梨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缔恳,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼宝剖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了歉甚?” 一聲冷哼從身側(cè)響起万细,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纸泄,沒(méi)想到半個(gè)月后赖钞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聘裁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年雪营,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衡便。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卓缰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情征唬,我是刑警寧澤捌显,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站总寒,受9級(jí)特大地震影響扶歪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摄闸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一善镰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧年枕,春花似錦炫欺、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至摩桶,卻和暖如春桥状,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硝清。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工辅斟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芦拿。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓士飒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蔗崎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酵幕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 命令歷史 以:和/開(kāi)頭的命令都有歷史紀(jì)錄,可以首先鍵入:或/然后按上下箭頭來(lái)選擇某個(gè)歷史命令蚁趁。 啟動(dòng)vim 在命令...
    im螞蟻閱讀 30,721評(píng)論 3 48
  • 1. vim 選擇文本,刪除实胸,復(fù)制他嫡,粘貼 文本的選擇,對(duì)于編輯器來(lái)說(shuō)庐完,是很基本的東西钢属,也經(jīng)常被用到,總結(jié)如下:v ...
    路癡千行閱讀 3,277評(píng)論 0 0
  • vim 選擇文本门躯,刪除淆党,復(fù)制,粘貼 文本的選擇,對(duì)于編輯器來(lái)說(shuō)染乌,是很基本的東西山孔,也經(jīng)常被用到,總結(jié)如下: v 從...
    壹首簡(jiǎn)單的歌閱讀 880評(píng)論 0 7
  • Vim幾句話介紹Vim是Unix系統(tǒng)上的文本編輯軟件(你該不會(huì)不知道什么是文本編輯軟件吧:杀铩)台颠,在windows上也...
    何必遠(yuǎn)方閱讀 3,125評(píng)論 0 3
  • 12月串前,盤(pán)點(diǎn)2016年讓我事半功倍的生活小妙招 2016年的最后一個(gè)月,最怕和人吃飯实蔽,連我媽甚至在吃早飯的匆忙時(shí)間...
    袁小團(tuán)的普洱茶閱讀 509評(píng)論 0 5