キーボードマクロで遊ぼう
2011-12-25


こんにちは。Vim Advent Calendar 2011 25日目の@plasterです。Vimって素敵なエディタですよね。

今日の記事のネタのメモをどこに保存していたか忘れてlocatefindgrepを重ねた挙句、 Vim起動して[CTRL-O]ですぐ見つかりました。知らなかったひとは今すぐ:h CTRL-Oしましょう。

エディタは生産性の源だと思います。

さて今日は、その生産性を効率的にむだづかいする方法の紹介です。いいんです、実用性などに縛られないからこその愛なのです。目指せ極北!

というわけで、かんたんなアスキーアート生成と、数列の生成と、迷路ソルバやります。全部キーボードマクロで

フィボなっち

まずはアスキーアートの生成から。見出しの「フィボなっち」というのは

(●´ー`●)
(●´ー`●)
(●´ー`●)(●´ー`●)
(●´ー`●)(●´ー`●)(●´ー`●)
(●´ー`●)(●´ー`●)(●´ー`●)(●´ー`●)(●´ー`●)
...

1行あたりの(●´ー`●)の個数が 1, 1, 2, 3, 5, ……とフィボナッチ数列になっているテキストです。

特になっちに思い入れがあるわけではないのですが、なんとなく和むAAなので、ちょっと気に入っています。 このテキストの入力を Vimで自動化してみましょう。

最初の2行は、そのまま入力します。 Oで新しく1行あけつつ挿入モードに入り、テキストを入力して[Esc]でモードを抜けます。 フィボナッチ数列は最初の2項が基本なので、Ypでコピペして2行にしておきます。

ステップ

今、バッファが

(●´ー`●)
(●´ー`●)

となっていて、2行目にカーソルがあるはずですね。ここで ykjpgJと入力すれば、次のようなバッファになります。

(●´ー`●)
(●´ー`●)
(●´ー`●)(●´ー`●)

カーソルは3行目です。ykjpgJを打つたびに、最後の2行をつなげたものが最終行に追加されます。たかだか6回の打鍵ですが、自動化してしまいましょう。

キーボードマクロの記録と呼び出し

qaでマクロの記録を開始します。その後qで記録を終了し、@aでマクロの呼び出しができます。たとえばqaykjpgJqと入力すれば、ykjpgJを実行しつつ記録するわけです。

(●´ー`●)
(●´ー`●)
(●´ー`●)(●´ー`●)
(●´ー`●)(●´ー`●)(●´ー`●)

以後、最終行にカーソルがある状態で@aを入力するたびに1行ずつ増えていきます。

(●´ー`●)
(●´ー`●)
(●´ー`●)(●´ー`●)
(●´ー`●)(●´ー`●)(●´ー`●)
(●´ー`●)(●´ー`●)(●´ー`●)(●´ー`●)(●´ー`●)

3@aとか打てば、3行ふえます。99@aとかももちろんアリ!ですが、すごいことになるので注意しましょう。万一やってしまって Vim が暴走しちゃったら、落ち着いて[CTRL-C]です。

フィボナッチ数列

コピペでひたすらテキストを増やしていく例を紹介しましたが、もちろん普通にフィボナッチ数列を作ることもできます。

……とその前に、[CTRL-A]を紹介します。あと、レジスタとマクロの関係を説明します。

CTRL-A

たとえば、バッファに

1

とある状態で、1の部分にカーソルを持っていって[CTRL-A]すると

2

になります。もう一度[CTRL-A]すると

3
になります。[CTRL-A]するたび1ずつ増えるね!ってことです。 10[CTRL-A]とすれば10ふえます。
13

マクロとレジスタ

さきほどはqaqを使ってキーボードマクロを記録しました。記録されたマクロは@a


続きを読む

[Vim]
[Advent Calendar]

コメント(全2件)
コメントをする


記事を書く
powered by ASAHIネット