Software Design の1月号の記事で、「編集はプログラミングである 」というコラムがありました。(リンク:Vim に乗り換え!?)
Vim では 「FooFooFoo」と書くには、3iFoo Esc とタイプすれば良いようです。
結果として FooFooFoo と得るために、行うのは 3iFoo Esc という入力である。「これはプログラムである」と考える。
FooFooFoo
FooFooFoo とそのままタイプするのは DRY の原則に反しており、プログラマとしては避けたい(?)
Emacs で FooFooFoo をプログラミングするにはどうするか? 次のような案はどうか?
1. "Foo M-del C-y C-y C-y"
【 説明 】
Foo とタイプしてそれを切り取って3回貼り付ける。
7ストロークのタイプになり、FooFooFooとタイプするより(9ストローク)も2ストローク少なくなる。(速いかどうかはともかく)
しかし、最後のC-y C-y C-y は同じことを3回やっていて依然としてDRY違反で、モヤモヤ感は残る。
M-3 C-y というようなイメージで貼付けを3回するようプログラミングしたい。
(M-数字 は次のコマンドや入力を数字回繰り返すコマンド)
しかし M-3 はこの場合は C-y に適用できない。
2. "C-x ( Foo C-x ) M-2 C-x e"
【 説明 】
C-x ( と C-x ) はマクロの定義。最後のC-x e がマクロの実行。
C-x ( と C-x ) の間の Foo という入力がマクロとして定義され、マクロの実行をM-2 で2回繰り返す。(定義した時に1回、Fooを入力しているのであと2回繰り返して計3つのFooが入力されたことになる。)
Fooという関数を切り出して、ループで2回実行しているようなイメージ。プログラミングをしているような感じがする。
マクロはショートカットがあるので、実はもっと簡単になる。
C-x ( は F3 キーに割り当てられていて、C-x ) はF4 キーに割り当てられている。
さらに、C-x )は繰り返しのコマンド "M-数字" が適用できて、この場合にはマクロを定義して即座に数字(-1)回分実行する。
まとめると以下の "プログラム" になる。
"F3 Foo M-3 F4" (6ストローク!!)
3. まとめ
あまり実用的ではない編集方法でした。
以下を覚えておくと、この駄文を最後まで読んだ意義があるかもしれません。
1. M-del で後ろ向きに1単語 kill する。
2. M-数字 コマンド でコマンドを "数字" 回繰り返す。
3. マクロの定義、実行は意外と簡単(やってみるべき!)。定義にはショートカット(F3, F4)もある。
リンク
・Emacs manual - Keyboard Macros 17.1 Basic use
0 件のコメント:
コメントを投稿