Vimマクロ入門:繰り返し作業を一瞬で自動化する
概要¶
Vim のマクロ機能を使うと、キー操作の列を記録して何度でも再生できる。q{レジスタ名} で記録開始、q で終了、@{レジスタ名} で実行。単純な繰り返し作業であれば、マクロ1つで数十〜数百行の編集を瞬時に終わらせられる。
詳細¶
基本的な使い方¶
# マクロの記録
q a → レジスタ a への記録開始(qの後に任意のアルファベット)
...操作...
q → 記録終了
# マクロの実行
@ a → レジスタ a のマクロを1回実行
10 @ a → 10回繰り返す
@ @ → 直前に実行したマクロをもう一度
具体的なユースケース¶
ケース1: CSV の各行にクォートを追加¶
# 変換前
name,age,city
Alice,30,Tokyo
Bob,25,Osaka
# 変換後
"name","age","city"
"Alice","30","Tokyo"
"Bob","25","Osaka"
# マクロ操作(1行目にカーソルを合わせて実行)
qa 記録開始
0 行頭へ
i"<Esc> 先頭にクォートを挿入
f, 最初のカンマへ
i"<Esc> クォートを挿入
a"<Esc> カンマの後にクォートを挿入
...(同様に繰り返す)
j0 次の行の先頭へ
q 記録終了
99@a 残りの行に適用
ケース2: 連番の変数名を生成¶
" 変換前(1行だけある状態から)
" let var1 = ""
" ↓ 以下を生成したい
" let var2 = ""
" let var3 = ""
" ...
qa 記録開始
yy 現在行をコピー
p 下にペースト
Ctrl-a 行内の数字をインクリメント
q 記録終了
9@a 9回繰り返して var2〜var10 を生成
ケース3: Markdown のリスト整形¶
# 変換前(各行が "- item" の形式)
- foo
- bar
- baz
# 変換後(番号付きリスト)
1. foo
2. bar
3. baz
# マクロ操作
qa
0df 先頭の "- " を削除
i1. <Esc> 番号を挿入
j0
q
マクロの確認と編集¶
" レジスタの中身を確認
:reg a
" マクロを編集する(一度バッファに展開して編集)
:let @a = substitute(@a, '\n', '', 'g')
" 現在のマクロをファイルに保存
:echo @a
応用: 再帰マクロ¶
なぜ重要か / いつ使うか¶
- ログファイルや CSV を手作業で整形する必要があるとき
- 数十〜数百行に同じ編集パターンを適用したいとき
- プラグインなしで Vim 標準機能だけで完結させたいとき
.コマンドで対応できないような複数ステップの繰り返しに向く- 「この作業、マクロにできないか」と考える癖をつけると Vim 熟練度が上がる