------------------以下是網(wǎng)上 發(fā)現(xiàn)的很好的VIM 操作 ,很有用 -----------------------------------------------
本網(wǎng)頁收集了一些簡單的 VIM 操作, 這些操作要么其它普通文本編輯器不能完成, 要么完成起來很慢。 通過本網(wǎng)頁, 可以堅定初學(xué)者學(xué)習(xí) VIM 的決心與信心。 如果你有什么好的易于演示的簡易技巧, 請與滇狐聯(lián)系, 將更多內(nèi)容添加到這張網(wǎng)頁中。
另外, 如果沒有明確說明, 本文中的提到的按鍵均是大小寫敏感的。 例如, 文中提到“按下 G”時, 你按的鍵應(yīng)該是“Shift + G”。
1 準(zhǔn)備工作
首先, 我們打開 VIM, 輸入一段文本, 用于今天的演示:
2 查找替換
按幾下 ESC 進(jìn)入 Normal 模式, 輸入以下命令:
:%s/ /\r/g
。 回車后得到的效果如下:
is
a
test
解說: 這條命令的作用是, 將文章中所有的空格替換為回車。 幾乎所有的編輯器都支持查找替換, 但并不是所有的編輯器都支持把空格替換為回車, 因此這個功能在許多別的編輯器里做起來是比較繁瑣的。
3 行的拼接
剛才我們把一行文字打碎為 4 行了, 那如何再把它們拼接起來呢? 當(dāng)然, 我們可以通過前面說的查找替換的方式, 將回車再替換為空格, 實(shí)現(xiàn)行的拼接。 但是, 這里我們用的是另一種方式。
按幾下 ESC 進(jìn)入 Normal 模式, 然后輸入這段命令:
ggVG
。 gg
表示跳到文本開頭,
V
表示進(jìn)入行選擇模式, G
表示選擇到文章末尾。 通過這 3 條命令, 總共 4
個按鍵, 我們選中了整篇文章。
然后, 按下冒號 :
進(jìn)入命令模式,
狀態(tài)欄上出現(xiàn): :'<,'>
字樣,
在它后面輸入 j
, 然后回車, 可以看到,
整篇文章又被拼接起來了, 整個操作包括回車只按了 7
次鍵:
4 復(fù)制粘貼與重復(fù)動作
按幾下 ESC 確認(rèn)當(dāng)前處在 Normal 模式下, 然后按
yy
, 即可將當(dāng)前行復(fù)制到默認(rèn)寄存器中
(相當(dāng)于剪貼板)。 然后按下 12p
, VIM
將執(zhí)行粘貼動作 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
解說: 在 VIM 中, 復(fù)制和粘貼操作相當(dāng)快捷。 另外, VIM 中大部分命令都可以通過在命令前加數(shù)字重復(fù)若干遍。
5 列操作
接下來我們把每一行的開頭第一個字母改為大寫。
按幾下 ESC 確認(rèn)當(dāng)前處在 Normal 模式下, 然后按
gg
跳到第一行, 按下 Ctrl + v 進(jìn)入列選擇模式
(如果你按下 Ctrl + v 沒能進(jìn)入列選擇模式,
請看這里),
然后按 G
, 跳到文章最后一行,
此時你應(yīng)該看到, 文本的第一列被選中了,
而且只選中了第一列。 按下 U
鍵,
可以看到, 每行的第一個字母都變?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
然后, 我們在每行的前面加上一個星號。 按下
gg
跳到第一行, 按 Ctrl + v 進(jìn)入列選擇模式,
再按 G
, 選中全文的第一列, 然后按
I
, 進(jìn)入列插入狀態(tài), 輸入星號
*
, 再按下 ESC, 你會看到,
所有行之前都出現(xià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
解說: 對于編寫程序的人來說, 把一段代碼批量注釋掉是一個很常見的操作, 使用列插入可以很容易地做到這一點(diǎn)。 另外, 列選擇后按 x 刪除被選中的塊, 可以批量地解除注釋。
6 宏的錄制
接下來, 我們要將文本的偶數(shù)行修改為:
This is another test
。
由于所有的偶數(shù)行都要進(jìn)行同樣的操作,
因此我們把這個操作錄制下來,
然后重復(fù)播放若干遍, 就能很快地完成這項(xiàng)工作了。
首先, 按幾下 ESC 確認(rèn)處在 Normal 模式下, 再按下
gg
跳到第一行, 準(zhǔn)備開始操作。
我們首先按下 q
鍵,
然后再按一個其它字母,
將這個宏錄制到該字母對應(yīng)的寄存器下。
例如我們這里使用 m
寄存器, 則按
qm
。 此時 VIM 狀態(tài)欄出現(xiàn)“recording”字樣,
表明已經(jīng)進(jìn)入了錄制狀態(tài)。
然后, 我們把第二行的 a
修改為
another
。 首先按 j
進(jìn)入第二行,
然后按 $
跳到行末, 再按兩下 b
往前跳兩個單詞, 此時光標(biāo)停在字母 a
上。
然后我們按下 caw
鍵刪除 a
并進(jìn)入插入狀態(tài), 然后輸入 another
, 按
ESC 回到 Normal 狀態(tài), 按 j 進(jìn)入下一行,
整個操作步驟就完成了。 最后, 我們再按一下
q
, 結(jié)束該宏的錄制。
接下來我們播放這個宏, 完成整個操作步驟。
在鍵盤上輸入 1000@m
, 表示將 m
寄存器里的宏播放 1000 次, 馬上可以看到,
文章中所有偶數(shù)行的 a
都變成了
another
。
*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 次的時候, 光標(biāo)挪到了屏幕最下方, 于是執(zhí)行過程就自動停止了。 因此, 在批量操作的時候, 我們可以指定足夠大的數(shù)字, 而不用擔(dān)心出現(xiàn)問題。
另外, 修改 a
的時候,
我們跳到行末后再使用 b
命令以單詞為單位跳轉(zhuǎn), 而沒使用 h
一個字母一個字母往回挪, 我們使用 caw
修改整個單詞, 而不使用 s
命令刪除單個字母并進(jìn)入 Insert 模式。
這些細(xì)節(jié)可以保證錄制得到的宏更具有一般性。
7 點(diǎn)命令
接下來, 我們在每行的末尾加上一個感嘆號
!
。
由于每行長度不同, 我們無法使用塊選擇方式批量尾部添加感嘆號。 使用宏錄制的方式是可以做到這點(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)了感嘆號。 反復(fù)按 j.j.j.
,
直到每一行尾部都添加了感嘆行為止。
*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ù)這個動作的時候, 也會在行尾添加同樣的字符。 點(diǎn)命令功能不如宏強(qiáng)大, 但它使用起來比宏簡便, 因此也有著廣泛的用途。
原文:http://edyfox.codecarver.org/html/vim_edit_tips.html