Hatena::Groupemacs

Emacs/Lisp/Drill

 | 

2011-12-28

空気のようなEmacs Lisp -2011 冬-

14:43 | はてなブックマーク - 空気のようなEmacs Lisp -2011 冬- - Emacs/Lisp/Drill

Emacs Advent Calendar 2011ということで。

27日目はd:id:k6kyさんの Anything-BibTeX を作りました - そんなことないよです。

TeXは大学の論文以来使っていないので、とても懐しかったです。

当時は「黒い画面」が大嫌いで、Emacsなんてもっての外でした。良い思い出です。


さて、28日目ということで既に今年は出遅れました。今年は目立ったことが何もできなかった1年でした。

今年も3年連続で「空気のようなEmacs Lisp」を紹介します。

一昨年の「Calendar->空前のEmacsブーム->社内でEmacsが浸透」作戦は見事に失敗に終わってしまい、

今年こそはとEmacs Bootcampを実施するも結果はでず、相変わらずEmacserは社内ではマイノリティです。

今年もAdvent Calendarはレベルが高くて困りますね。


今回も、個人的に「全てのエディタで標準でよくね?」と思えるくらい便利なのに、意外に浸透していないっぽいEmacs Lispを紹介します。

導入していない人はだまされたと思ってインストールしてみてください。


Dynamic Macro (dmacro.el)

普段使いのエディタというのはプログラムだけでなく、ちょっとしたテキスト編集にもつかうものです。

やりたい編集のやり方が浮かんできますから。

例えば特殊な置換とか行頭の単語の削除とか、「あー自分ならこうやっている」というのが浮かぶのではないでしょうか。


ちなみに社内にはそんなエディタが「Excel」という猛者がいますが、正直この人に勝てる気がしません。


個人的感覚ですが、ちょっとしたテキスト編集というのはだいたい「繰り返し操作」だったりします。

ただ、その繰り返しのルールが毎回異なるんですよね。

Emacsにはそういった操作のために「キーボードマクロ」というものがありますが、あまり使いやすいものではありません。

とくに「ちょっとした」もののためにキーボードマクロを設定するのも億劫です。

というかキーボードマクロが使いこなせていない人のほうが多いと思っています。


そういった繰り返し操作を「よきにはからって」記録して、いつでも実行できるようにしてくれるEmacs Lispが今回紹介するDynamic Macroです。


以下の設定を.emacsに記述します。その際にdmacro.elをロードパスに設置しておきます。

今回の設定では繰り返し指定キーを[Ctrl + r]にしていますが、自由に設定して構いません。

(defconst *dmacro-key* "\C-r" "繰返し指定キー")
(global-set-key *dmacro-key* 'dmacro-exec)
(autoload 'dmacro-exec "dmacro" nil t)

dmacro.elは公式ページでも丁寧に紹介されているように「繰り返し操作」をよきにはからって覚えて、その後の操作をキー1つで繰り返し操作を実行してくれるEmacs Lispですが、これを単なる「文字列の繰り返し」だけだと思ってはいけません。


dmacro.elは「キー操作の繰り返し」をよきにはからってくれるのです。


例えば、以下のような文字列があったりします。

abc abc def abc def abc abc abc abc def abc abc abc def def abc abc abc abc def abc abc abc def abc abc
abc abc def abc def abc abc abc abc def abc abc abc def def abc abc abc abc def abc abc abc def abc abc
abc abc def abc def abc abc abc abc def abc abc abc def def abc abc abc abc def abc abc abc def abc abc
abc abc def abc def abc abc abc abc def abc abc abc def def abc abc abc abc def abc abc abc def abc abc

『この文字列の「abc」の偶数番目のみ「fgh」に編集したい』ときどうしますか?

ちなみに編集後の正解は以下です。

abc fgh def abc def fgh abc fgh abc def fgh abc fgh def def abc fgh abc fgh def abc fgh abc def fgh abc
fgh abc def fgh def abc fgh abc fgh def abc fgh abc def def fgh abc fgh abc def fgh abc fgh def abc fgh
abc fgh def abc def fgh abc fgh abc def fgh abc fgh def def abc fgh abc fgh def abc fgh abc def fgh abc
fgh abc def fgh def abc fgh abc fgh def abc fgh abc def def fgh abc fgh abc def fgh abc fgh def abc fgh

手動でやるとなかなか骨が折れそうです。適当なタイミングで「def」がはいっていることで、単純な文字列置換ではうまくいかなそうです。


ところが、dmacro.elでは

『i-search(C-s)の「abc」の検索結果の2番目まで移動して、それを「fgh」に変更する』

というキー操作を繰り返すことができるのです。検索まで含めて繰り返すことができるのです。


一般的なキーバインドだと[C-s abc C-s C-m Backspace Backspace Backspace fgh]のキー操作の繰り返しです。

この操作を2回ほど繰り返して、後は[C-r]を連打すれば編集完了です。すばらしい。



まとめ

今回も「空気のようなEmacs Lisp」としてdmacro.elを紹介しました。

自分はこのEmacs Lispのおかげで何度となく楽をしています。

皆さんも是非設定してみてください。


明日はd:id:poginさんです。

 |