EmacsLisp弱者のためのオレオレカスタマイズ: キーボードマクロは便利です


はじめに

私はEmacsが好きです.
Emacsなしで文章をしたためることに抵抗を覚えてしまう、典型的なEmacserです.
もちろん、init.elは散々弄っています. ええ、もちろん.

しかし、自分で関数を定義してどうこう、、、ということはあまりしていません.
何故ならEmacsLispが苦手だからです.

もちろん勉強しようとはしましたよ.
しかし、いくらEmacsのためとはいえ、Emacs以外で特に用途のない言語を勉強しようというモチベーションが、、、ごにょごにょ、、、

まあ確かに、関数型言語の勉強の足しに、というお題目を掲げることはできますが、でも仕事でそんなに使うこともないし、どうせ勉強するんなら括弧おばけがない言語で、、、ごにょごにょ、、、

...

そもそも標準関数を操れるだけで十分だし!どうせ欲しいと思ったものは大方melpaに転がってるし!
と思っていました.

しかしながら、怠惰欲には限りがありません. 正月ですから.
パッケージにするほどのことでもない細々とした操作を関数にまとめたくなりました.
でもそのためにElispを勉強するモチベは湧きません. なんたって正月ですから.

その程度勉強すればいいじゃない、とお思いでしょうが、Elispというのは常日頃から触るものではないのです. Emacsのお手入れをするのは暇を持て余す長期休みくらい. 年に数回くらいしか触らない言語仕様は、海馬にも大脳皮質にも留まってはくれません. とほほ、、、

という私のような怠惰なあなたのために、本題に入ります.

キーボードマクロ

Emacsにはキーボードマクロという便利な機能があります. Vimにもあるはず.
キーの動作を記録してマクロとして保持する機能です.

使い捨てなので関数を作成する程でもないけど、ちょっと繰り返し実行したいコマンドがあるんだけどね、的なニーズにがっつり応えてくれます.

キーボードマクロ記録開始はC-x ( . キー操作を実行し、C-x )で記録です.
マクロを実行するには C-x e です. そのあとeを連打すればさらにマクロを実行します.

たとえば、

emacs, emacs, yes! emacs!
emacs, emacs, love! emacs!
emacs, emacs, peace! emacs!

を行ごとに括弧でくくりたいとします:

(emacs, emacs, yes! emacs!)
(emacs, emacs, love! emacs!)
(emacs, emacs, peace! emacs!)

これは C-x ( C-a ( C-e ) C-n C-x ) というマクロを作ればよいのです.

カーソルを行の先頭へ移動 → (を入力 → 行末へ移動 → )を入力 → 下の行へ移動

という流れです. あとは C-u 3 C-x eでマクロを3回実行します.

完璧!!

もちろん3行くらいなら手でやれよ、と思うかもですが、これが100行あったらさすがに嫌になります.
でもこの程度の作業に別スクリプトをつくるのは癪ですね.
キーボードマクロは「Emacs上の使い捨て関数」だと思っていただければ良いと思います.

さらに、*scratch*を利用した応用を理解するとさらに幅が広がります:

手入力ではなく、マクロを使用して連番を作成しています.
Lisp Interaction Modeの*scratch*で順次1を加算しているのです.
カーソル上の数字をコピー → *scratch*で1加算 → 結果を元バッファにヤンク → *scratch*バッファを整える
てな具合です.

ちょっと頭を働かせれば何でもできそうですね.
「Emacsはエディタではなく環境」という格言が身に沁みます.

Elisp弱者の救世主: elmacro.el

もうなんとなくお察しだと思いますが、キーボードマクロをElispに変換するパッケージがあります.
るびきちさんのサイトが詳しいので、詳細はそちらでどうぞ:

elmacro.el : キーボードマクロで超簡単に自作コマンドを作ろう!

自分はこれで何がしたかったのかと言うと、M-uと同じような感覚で単語の頭だけ大文字変換したかったのです.
めでたく自分でElispを書くことなく解決することができました.
もちろん、Elispに変換しても大したことない関数なのですが、手前で書くよりも楽ちんなはずです.
ゴリゴリLisperの方も是非どうぞ.

これでElisp弱者にも希望が見えてきました. 良い正月になりそうです.
では皆様、よきEmacsライフを.