在使用 vim 的時候常常會不小心讓狀態列出縣 recording 的字樣,按 q
可以消除,今天不小心看到某篇文章才發現這是 vim 的 macro 功能,而且十分強大,vim 真的是一個可以活到老學到老的工具,來示範幾個範例。
.sample { border: 1px; color: red; padding: 4px; margin: 10px; }
以這個 css class 來講,假設我們要讓每個 ; 後斷行,有非常非常多的方式,marco 的步驟如下
- 先將游標移到 border 字樣
- 在 visual mode 按下
qa
(qa 是指將過程錄到 a 這個暫存,a-z, 0-9 都可以使用) - 按下
f;
,此時游標會跑到 ; 上面 - 按下
a
,游標會跑到 ; 後面並且變成 insert mode - 按下
enter
,完成了第一個斷行 - 按下
esc
變成 visual mode,在按一次q
完成錄製
.sample { border: 1px; color: red; padding: 4px; margin: 10px; }
現在內容應該會變成這個樣子
將滑鼠移到 color 那行按下 @a
(@ 就是執行 macro,後面接要使用的紀錄),斷行自動產生了,如果要到每一行按 @a
也太弱了,可以在前面接數字指定 marco 次數,以這個 case 來說 3@a
就可以完成所有的斷行。
另外示範一個 increment 的範例,在 vim 中使用 ctrl + a
可以針對某個數字增量,ctrl + x
可以減量,但在 windows 裡面 ctrl + a
會被定義為全選,關掉的方式很簡單,打開 .vimrc 檔,在 behave mswin 下加上 :nunmap <C-a>,這樣便會取消全選功能。
a = 1
以這個例子當範例,可以選擇取代法,也可以用 macro
- 在 visual model 將游標移到 a = 1 那行
- 按下
qa
- 使用
yy
複製,按下p
貼上 - 移到新的行數後按
ctrl + a
,會發現數字變成 2 了 - 按下
q
完成錄製
按下 @a
可以發現新的行數會變成 a = 3,搭配數字便可以做出你需要的數量了。