【実践Vimを読む①】Vimで.(ドットコマンド=繰り返し)やマクロを実践!

事前確認

個人的表記ルール:<Shift+R>はシフトキーとRを同時に入力。

         wqはwのあとにq。w->qも同様にwの後にqとします。


.は前回のコマンドを繰り返す、"マイクロマクロ"とも言える

たとえば以下のような行があるとしてそれぞれにセミコロンを足したいとしよう。

```

var x = 1

var y = 2

var xy = x*y

```

カーソルがが1行目の"v"にあるとしたらAコマンドで行末に移動^Insertモードにする。

そして;を追加する。

ESCでNormalモードにする。

そしてjコマンドで下に移動。

そこで.コマンドを押せばAコマンドと;の挿入が行われる。

疑問:なぜ二つのコマンド(A+;の挿入)が記憶されるのか。jは繰り返されないのか。

答え:.コマンドはInsertモードで行なったことが一まとまりとして繰り返されるらしい。

InsertにはいるAコマンドも含まれる。

ただし注意点としてはInsertモードでカーソルキーで移動したら記憶は途切れるということである。つまり移動も混ぜ込みたいならマクロモードを使わざるを得ないのかな。。。そうなるとマイクロマクロの出番が限られるというか上位互換のマクロモードを覚えれば良いのかと思ってしまうが。

つまり、マクロを使えば移動のjコマンドも記録できるのでそっちを基本利用するんじゃないかな。

マクロも簡単!
q->任意文字で覚えてqで終了。@->任意文字で実行!

たとえば上記の例と同じように全ての行末に;を挿入したい場合。

マクロの記録:q->任意の英字(ex. qa)で開始。Aコマンド -> ; -> ESC -> jを行い、qで記録終了。

マクロの実行:@->先ほどの任意の英字(ex. @a)で;の代入と下の行への移動を実行できる!

マクロの再実行:@@で前回のマクロを再実行できるので連打に便利。

マクロを10回実行:10@{記録した英字}、or 最後に実行したマクロなら10@@

北信に単身赴任したら最高だった

信州北部に住むタンパク質を愛するプログラマの日常 ~ Awesome Shinshu !! ~

0コメント

  • 1000 / 1000