6年ぶりの大きなアップデートとなったEmacs 22.1、CVS先端の開発バージョンを使っているユーザは、なんとなく見過ごしてしまっているかもしれないが、新しい機能には便利なものが多い。ここでは、特に強化された置換機能について取り上げる。使いこなせば強力なので、是非使ってみて欲しい。

replace-regexpがプログラマブル置換へとパワーアップ

Emacsではreplace-regexpで正規表現置換ができる。現在主流となっている正規表現のスタイルはPerlに源流をおいたものが多いが、Emacsの正規表現はそれとは異なる。特に\( \)の表記などが独特だ。とはいえ、Emacsを愛しているならば、馴れるしかないだろう。書き方が違うだけで、本質的には同じことだ。

さて、22.1.xではこの正規表現置換で関数の使用がサポートされた。具体的には、正規表現のなかに、任意の処理が実行可能なLispコードを指定できる。

これまで複雑な置換をするとなると、Perlなどのスクリプト言語で置換処理を書くことが多かったと思うが、22.1.xからはEmacs内で完結できる。ここでは便宜上、この関数を「プログラマブルreplace-regexp」と呼びたい。

サンプルでつかむプログラマブルreplace-regexp - 手始めは値の比較

早速試してみよう。最初の例題は、リスト1をリスト2のようにするというものだ。

リスト1 プログラマブルreplace-regexpをためしてみる

1 2 2 2 2 1

リスト2 置換後の文字列