2015年2月8日日曜日

Emacs "FooFooFoo" をプログラミングする

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

・Vim に乗り換え!?




0 件のコメント:

コメントを投稿