Emacs 22 における置換コマンドの変更点

nanasi さんが紹介してくれたサイトを自分なりに噛み砕いてみる.
そのサイトには, 分かり易い例が載ってたので, それを試してみた.
このエントリは, そのメモ.
全部, 転載すんのは気が引けるので, 必要な部分だけを.



まず, Emacs 22 では, query-replace-regexp や replace-regexp が高機能化されましたよ, と.
そして, その高機能化された点をサイトでは, 6つの例で説明してる.

  • Example: Changing Case in Replacement Strings
  • Example: Numbering Lists
  • Example: Re-numbering Lists
  • Example: Alphabetically Numbered Lists
  • Some Even Snazzier Examples
  • Example: Heading-Tag Promotion/Demotion

Emacs 22 での新しい表現が紹介されてる部分のみをメモろうかな.
さすがに全部は, わるい気もするし.
ということで, ここでは, 最初の2つを.
残りの4つは, 上手い使い方の紹介, かな.
そこも読んでみたけど, 驚きが多かった. ナンバリングを数値からアルファベットにするとか.

Example: Changing Case in Replacement Strings

「置換文字列の状態, 大文字小文字とか?を変更する」って訳せばいいのかな.
M-x replace-regexp を使って, 置換文字列のある文字の状態を変更できるようになったとのこと.
ここでは, 単語の先頭を大文字にする例を載せてる.

M-x replace-regexp
  Replace regexp:  \(\w+\)
  Replace regexp with:  \,(capitalize \1)

最初の正規表現は, 単語のみを抽出するということ.
2番目のが置き換え文字列.
lisp 関数 capitalize を呼出している. \1 は, capitalize を適用する文字列.
Ruby だと $1 とかに当たるもので, ここでは, 正規表現にマッチした単語ってことかな.



このように, 置き換え文字列の先頭に \, を使うことで,
lisp 式を使えるようになったというの1番目みたい.
すげえ.
ちなみに, capitalize は, interactive な関数じゃない.
ってことは, 全部の関数が使えるってことなのかな.

Example: Numbering Lists

「リストの数え上げ」でいいのかな.
新しい置換評価機能では, 番号付きのリストを作成することが容易になったとのこと.
Emacs 22 は, 逆参照メタキャラクタ \# を持っていて,
それは, 私たちが今までのところ, 現在のコマンドでした置換の数をカウントするものである, と.
サイトで紹介されてる正規表現は, こんな感じ.

M-x replace-regexp
  Replace regexp: \(.+:\)
  Replace regexp with \#. 

これは, 頭から「:」までの文字列を「番号. 」の形に変更する式.
これは, もしかしなくても, すごく便利そう.



例えば, こんなの↓があってさ. 頭に行番号をつけたいとする.

aa
bb
cc
cc
ee

その場合は, こいつをリージョンに入れて, replace-regexp 「^」, \#: で望みどおりになる.
こんな感じに.

0:aa
1:bb
2:cc
3:cc
4:ee

これ, ものすごく使いそう. うん.

更新時刻

2007年02時21分0:37