この記事は株式会社ネクスト(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 が好きなエンジニアも好きじゃないエンジニアも募集しています。
明日は リモートワークの話みたいです。