👏

vim マクロで楽する!実践例あり

に公開

vim のマクロとは

vim でマクロという機能があります。
特定のキー入力を保存しておき、後から特定のキー入力を簡単に呼び出すことができます。

特定の操作を繰り返したい場面で強力な効果を発揮します。

vim のマクロの使い方については以下の記事などをご覧ください

vim マクロの使い方

https://qiita.com/yuucu/items/74e3f93ea7dd06d2c1bb

vscode の vim 拡張機能でもマクロは使えます!

マクロ実践例

先日業務中に vim のマクロを有効活用することができました。

とある issue の対応時に、ソースコードに大量にある switch 文の前後に #pragma を設定したいという状況になりました。


これを

switch (hoge) {
    ...
}

こうしたい

+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wswitch-enum"
switch (hoge) {
    ...
}
+ #pragma GCC diagnostic pop

これに対応するために、switch 文にカーソルを合わせた状態で実行すると switch 文の上下に #pragma が追加される というマクロを作成しました。

以下の様にマクロを作成しました


事前準備

貼り付けたい内容を z, x レジスタに行コピーしておく
( V で行選択 -> "zy "xy で各レジスタにコピー)

マクロ内容

操作内容 キーバインド
switch 文の上に #pragma を貼り付ける "zP
(カーソルが上に行くので)カーソルを2行下に下げる jj
(switch 文の下にカーソルを合わせたい。
vim は % で対応する括弧にジャンプできるのでそれを使うために)
カーソルを switch 文の後ろの { に合わせる
f{
対応する括弧にジャンプする %
switch 文の下に #pragma を貼り付ける "xp

この様にマクロを作成することで以下のようにマクロを実行することで一瞬で switch 文の上下に #pragma を追加することができます。

あとは switch 文を検索 -> @@ でマクロを実行という手順を繰り返すことで簡単に大量の switch 文の上下に #pragma を追加することができました。

おわりに

vim のマクロは特定の操作を繰り返したい場面で非常に有効なので、ぜひとも使ってみてください!

Discussion