この記事は株式会社ネクスト(Lifull) Advent Calendar 2016 の12日目です。
この記事の対象とゴール
対象
Vim を使ってるけど マクロ とかいまいち使ってない人、どう使うか迷う人。
ゴール
なんとなくマクロを使っていこうかなという気になる。
注意
なお、この記事はエディタ宗教戦争を助長するものではありません。
わたしとVim
丸5年くらい Vim を使っています。
そこまで長いわけじゃないけど、 Vim は好きです。
2こくらいですが、 プラグイン も書いたりしてます。
最近は go で CLIツール を書いたりしているのですが、これも Vim で書いてます。
そんなふうに プログラムを書いているときなど、 Vim のマクロはちょっとした時に便利です。
私の使い方を書こうと思います。
マクロとは
タイプした文字をレジスタ{0-9a-zA-Z"}に記録できます。
詳しくは、
:h complex-repeat
をご覧ください。
効率的に利用する
マクロの開始は q{0-9a-zA-Z"} で実行できますが、押しやすいので qq
をよく使っています。
これを、
a = data['name']
b = data['age']
aa = data['weight']
bb = data['height']
こんな感じにしたいとします。
name = data['name']
age = data['age']
weight = data['weight']
height = data['height']
ハッシュのキーと変数名を揃えたいみたいな感じのときですね。
正直、このケースは以下で置換すれば一発です。
:%s/\v^[^ ]+(.+\['(.+)'\])$/\2\1/g
ただ、そういう場合だけでもないと思うので、今回はマクロを作るバージョンでやってみます。
実際問題、正規表現作るよりもマクロでやってしまったほうが早いケースも多いです。
マクロを作るときに意識していること3つ
A. 行単位の処理を意識する
B. 登録開始直後に最初に決まったポジション(だいたい先頭)に移動するコマンドを入力する
C. 登録終了時は次に処理したい行に移動してから終了する
というところです。
実際に作ってみる
まず、ファイルの始めに行ってからスタートするので、 gg
ですね。
-
qq
でマクロの登録を開始します。 - 上記の B を意識して、
0
で先頭に行きます。(^
でもいいですが、この場合どちらでも構いません、場面によって使い分けて下さい) -
dt␣
で左辺の文字列を消します。 - ハッシュのキーの部分に移動して内容をコピーしたいので、
2t'
で移動、そしてyi'
でヤンクします。 - また
0
で先頭に戻り、P
でペーストします。 - 最後に C を意識して
j
で下の行に移動し、q
を押してマクロの登録を終了します。
3@q
で完了です。
デモ
今回はシンプルな例ですが、いろんな発展も上記の、3つ を意識すれば使い勝手良く、色々と効率化できると思います。
最後に
ネクストは Vim が好きなエンジニアも好きじゃないエンジニアも募集しています。
明日は リモートワークの話みたいです。