Vimでマクロを使って連番の文を簡単に入力する方法

コードを書くときに, たまに, 以下のような連番を用いたコードを書くことがあると思います. 実直に書いても良いのですが, Vim上で少し工夫をすれば, 非常に容易に書くことができます.


var1 = 1
var2 = 3
var3 = 5
var4 = 7
var5 = 9
var6 = 11
var7 = 13
var8 = 15
var9 = 17
var10 = 19
            

どうするかといいますと, マクロという機能を使います. マクロとは, 簡単にいえば, 任意の操作を記憶させて, それを繰り返し使うことができる機能です. マクロについては, 「Vimのマクロの使い方」で解説していますので, 良かったらみてみて下さい. このページでは, マクロを使って上のコードを書くときの考え方を解説していこうと思います.

注意点としては,

  • 同一の操作の繰り返しで目標を達成する必要がある

ということに尽きると思います. なので, 上のようなコードを作りたいときには, 規則性に注目します. 例えば, 今回注目すべき性質は,

  • 増やしたい数字のうちの一つが, 一貫して4文字目にあるということ
  • 等式の左側の数字と右側の数字までの距離が一定であること

になると思います.

つまり, 1行目から2行目を生成するときには,

  1. 1行目をコピー(yy)
  2. 2行目を1行目と全く同じ行として生成(p)・・・この時には, カーソルは, 2行目の行頭にあるはずです
  3. 3文字文右に移動(3l or lll)
  4. 数字をインクリメント(<Ctrl+a>)
  5. 4文字右に移動(4l or llll)
  6. 数字を2回インクリメント(2<Ctrl+a> or <Ctrl+a><Ctrl+a>)

というようになると思います. また, これは, 2行目から3行目, 3行目から4行目, ...を作るときも同様の手順で生成できます.

つまり, この一連の流れを記録しておいて, それを繰り返し行うことで, 上のようなコードがかけます.

実際に操作を行うときは, まず1行目にカーソルがある状態で, q+アルファベット一文字を押して, 記録を始めます. その後, 1行目から2行目を作るためにyyplll<Ctrl+a>llll2<Ctrl+a>と押して, 最後にqを押して記録を終えます.

例えば, 最初をqaで始めるならば, 押すキーの流れは, 全体で, qayyplll<Ctrl+a>llll2<Ctrl+a>qとなります. あとはマクロの繰り返し機能を使えばいいので, 単発で使うなら@a, 複数回繰り返して使いたいなら数字@aと打てばよいです.

マクロを使って連番入力をする

実際の流れは, こんな感じです. 2行から10行に増やすところは, 8@aと入力しています.

ちなみに, マクロを記録させているときは, 左下に記録中という表示がでます.