Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim と マクロ

$
0
0

この記事は株式会社ネクスト(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ですね。

  1. qqでマクロの登録を開始します。
  2. 上記の B を意識して、 0で先頭に行きます。(^でもいいですが、この場合どちらでも構いません、場面によって使い分けて下さい)
  3. dt␣で左辺の文字列を消します。
  4. ハッシュのキーの部分に移動して内容をコピーしたいので、 2t'で移動、そして yi'でヤンクします。
  5. また 0で先頭に戻り、Pでペーストします。
  6. 最後に C を意識して jで下の行に移動し、qを押してマクロの登録を終了します。 3@qで完了です。

デモ

上記の操作をしたgifがこちら。
macro.gif

今回はシンプルな例ですが、いろんな発展も上記の、3つを意識すれば使い勝手良く、色々と効率化できると思います。

最後に

ネクストは Vim が好きなエンジニアも好きじゃないエンジニアも募集しています。
明日は リモートワークの話みたいです。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>