応用編:検索結果を別のバッファに記録する
面白い例として、検索結果を別バッファにまとめる例を紹介したい。まずリスト18のように関数を定義する。あとはリスト19のように置換対象を選んで、リスト20のように定義した関数を使えばいい。この例では\,(put-new-buffer \1 "buffername")のようにすると送信するバッファを選択できる。
リスト18 指定されたバッファにテキストを送る関数
(defun put-new-buffer
(text &optional name)
(setq curbuf (current-buffer))
(if (eq name nil) (setq name "*replace result*"))
(set-buffer (get-buffer-create name))
(end-of-buffer)
(insert text)
(insert "\n")
(set-buffer curbuf)
text)
リスト19 一致対象
Query replace regexp: \(.*\)
リスト20 結果を別のバッファに送信
Query replace regexp with: \,(put-new-buffer \1)
自分で関数を定義してreplace-regexpを使うという応用パターンだ。あらかじめ関数を組んでおけるため、複雑な処理も実行できる。なれてしまえばかなり強力なツールになることは間違いないところだ。