vim 數字批次遞增的三種方式

在寫程式、設定檔等很常會遇到需要寫數字的地方,在 vim 中有內建可以把數字遞增的指令(英文字母也可以遞增),在看完這篇文章後如果下次遇到這種情況就可以很快速的修改數字(或字母)。

所有數字位置相同

如果所有數字位置相同,要處理起來非常簡單,只要使用 Ctrl + v 進入選取模式,選擇至對應的位置,按下 g 再按下 Ctrl + a 即可。
    
Ctrl-v 10j g Ctrl-a
    

註:Ctrl-v 是同時按下 Ctrl 和 v , Ctrl-a 是同時按下 Ctrl + a ,以下都會使用這種方式做說明

數字位置不同

假設今天數字位置不同,就沒有辦法使用上面的方式了,筆者試了很久,就算使用什麼 :norm! f0 之類的都沒有辦法,原先筆者是想要進入選取模式後使用 f 跳到 0 的位置,但是這樣所有游標都會和主要游標的位置相同,無法處理:
筆者嘗試很久後發現其實直接大寫的 V (Shift + v)選擇全部,使用 g 和 Ctrl + a 就可以了,vim 會自動選擇第一個數字並遞增
    
V10j g Ctrl-a
    

包含多個數字(使用巨集)

上面的方式只是用於數字在最前面的情況,如果我們想要修改的數字沒有全部都在最前面,就無法達成,它只會呆呆的遞增最前面的數字:
但是這是 vim ,我們還可以使用巨集!雖然好像有點複雜,但是對 vim 熟練的話其實很簡單,說白了就只是使用各種游標移動指令找到數字,然後遞增並儲存數字(才可以達到累加的效果),最後再將移動游標倒下一行(才可以執行多次)就好了

先把數字 0 複製起來,游標移動到 0 上面按下:
    
yiw
    

錄製巨集

步驟好像很多,筆者一步一步拆解,還是不會的下面留言,筆者再想想辦法怎麼講的更簡單:
  1. qc : 錄製巨集,儲存到 c 中
  2. $ : 跳到最後面
  3. F0 : 往回找到 0
  4. viwp : 選取單字並貼上
  5. Ctrl-a : 遞增數字
  6. yiw : 複製單字
  7. j : 游標往下
  8. q : 停止錄製巨集
完整指令:
    
qc $ F0 viwp Ctrl-a yiw j q
    

註1:在錄製巨集時左下角會顯示 recording @c ,代表正在錄製「c」的巨集。如果做錯了可以使用 q 停止錄製,再按下 qc 就是重新錄製「c」巨集,隨時可以從頭再來
註2:筆者在這裡再多嘴一下,對 vim 比較不熟的朋友: u 是復原(undo), Ctrl-r 是重做(redo) 這樣就不用一直從新寫範例

啊然後如果讀者想練習,這裡也附上文章中的範例:
    
00 console.log(`id: 0`);
  00 console.log(`id: 0`);
  00 console.log(`id: 0`);
    00 console.log(`id: 0`);
    00 console.log(`id: 0`);
  00 console.log(`id: 0`);
  00 console.log(`id: 0`);
 00 console.log(`id: 0`);
 00 console.log(`id: 0`);
00 console.log(`id: 0`);
00 console.log(`id: 0`);

    

執行巨集

執行 10 次「c」巨集:
    
10 @ c
    

完美達成:

留言