前言
在 vim 中錄制宏的意思就是把一段操作錄制下來,然后可以重復執行。打個比方,我有一個文本,一共 50000 行,我要在每一行后面加一個英文句號。這個操作如果手動做的話效率非常低。這時候我可以這樣,在每一行后面加一個英文句號,然后讓 vim 自動重復執行這個操作,這是非常有規律的。
要在一行后面加英文句號的操作有兩種主要方法
第一種,在 normal 模式下,執行:
$a.
操作演示:
第二種,在 normal 模式下,執行:
A.
操作演示:
宏的詳細操作
我們在使用 vim 的時候,有時候一不小心在 normal 模式下按到 q ,然后再按一個鍵(比如 t)的時候左下角會出現一個 recording @t
,這其實就開啟了宏錄制,你接下來的 vim 內操作全部都會被記錄,直到你再次按下 q 的時候,宏就錄制完成了,我們暫且稱之為:宏存儲在 t 寄存器中,你想使用那一段宏的時候,只需要按下 @t
就可以了,如果你要循環 100 次數,就執行 100@t
,如果想使用其他的鍵(比如 abcd)也是可以的。
接下來是操作演示,我這里已經寫了一個 50000 行的文本文件,我現在要使用宏在每一行的后面加上一個英文句號:
操作分解:
第一步
vim test
用 vim 打開一個名為 test 的文件,它里面已經有 50000 行內容了
第二步
我在文件的頂部加了一個空行,這樣子做是因為我想要循環執行在每一行后面加句號這個動作,那我得一行行銜接下去,所以我把光標一開始定位在那個空行里面,這樣我的第一個動作就是要到下一行,這樣我就可以循環往下執行了
第三步
qt
打開宏錄制,我用的還是 t ,打開錄制之后,左下角出現了 recording @t
的字樣,說明已經開始錄制了。然后我就先到下一行,然后在末尾加了一個句號,最后再次按下 q 鍵,錄制完畢,這樣我的宏就做好了,t 寄存器里面保存的操作就是:
下一行 -> 光標定位到行尾 -> 進入 insert 模式 -> 輸入句號 -> ESC
翻譯成 vim 的操作就是:
j$a.
或
jA.
第四步
現在就可以調用了,我調用了三次
10@t
100@t
1000@t
我先循環調用 10 次宏,來試一下錄制的對不對,發現錄制正確之后,再調用了 100 次,也是完全正確的,最后我調用了 1000 次,執行有點慢,cpu 被吃了很多,但還是正確執行了。其實我們可以在宏的錄制中給 10 行加句號,這樣調用 1000 次會快一點,我這里只是演示而已,就不去折騰了。