本を読む

読書やコンピュータなどに関するメモ

Emacsの正規表現置換で“\#”のフォーマットを変える

 最近のEmacsでは、正規表現置換(replace-regexpやquery-replace-regexp)の置換後パターンの中に“\#”があると、そこに何番目の置換箇所かの連番数字が入ります。たとえば、“^”を“\#: ”に置換すると、各行頭に“10: ”のような行番号が挿入されます。

 ただ、以下の制限があって、ときどき不便を感じます。

  • 0オリジン固定
  • 数値のフォーマットが固定。“01”とか“ 1”とかにできない

 そこで、Emacs Lispのadviceを使って動作を変えてみます。コードはこんな(↓)感じ。

 やっていることは、query-replace-compile-replacementの結果を横取りして、“(number-to-string replace-count)” を “(format *replace-count-format* (+ replace-count *replace-count-base*))” に置きかえているだけです。

 そのうえで、たとえばこんな(↓)ふうにパラメータを変更します。

(setq *replace-count-base* 1
      *replace-count-format* "%02d" )

 すると、“^”を“\#: ”に置換したときに、行頭に“01: ”のような行番号が1オリジンで挿入されます。

 なお、置換後パターンの中に“\,”と式を入れた中でも“\#”を使えますが、ここには上のadviceは効きません。まあ、Emacs Lispの式の中なので、どうにでもなりますよね。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/882-ebefb4b6

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad