概要
Emacs の正規表現は結構使いずらくて、覚えられないので、「pyregexp」を利用して、Python の正規表現を利用してみる。
pyregexpに関して
Python を利用して Emacs 内の検索・置換の処理で Python の正規表現を利用できるようにする Emacs Lisp。動作には Python が必要。
設定
ソースを取得して、pathの通った所に配置。
git clone git://github.com/benma/pyregexp.git
init.el 等で以下のように設定する。
(require 'pyregexp)
(define-key global-map (kbd "C-c r") 'pyregexp-replace)
(define-key global-map (kbd "C-c q") 'pyregexp-query-replace)
(define-key esc-map (kbd "C-r") 'pyregexp-isearch-backward)
(define-key esc-map (kbd "C-s") 'pyregexp-isearch-forward)
使い方
公式サイト「pyregexp」の一部をそのまま引用する。
以下のようなテキストを用意。これの重複した文字を検索して、重複を削除してみる。
We we can delete double double words
by by using backreferences.
「C-c r」して入力を開始すると、「Regexp」になるので、「(?i)(\w+) \1」を入力。一致箇所がハイライトされるる。3箇所一致しているはず。一番最後の文字は「いち」なので間違わないように。
置換する場合は「enter」をすると「Replace」になるので、「\1」を入力。置換結果が「We we => We」のように表示される。問題なければ、enter することで置換される。
Python の式を利用することも可能。
以下のようなファイルを用意。
hoge
foo
bar
「C-c r」して「^」を入力すると、文字列の先頭が一致する。enter して Replace にして「C-c C-c」すると「Replace (using expression)」になるので「str(i+1) + ": "」を入力すると、先頭に「1: 2: 3:」のような文字が入力される。
str だけでなく、int等も利用できるのでかなり便利。
「wdired-change-to-wdired-mode」でも利用可能。かなり高度な置換ができる。
まとめ
まだ使いはじめたばかりだが、自分は Python に慣れているので、かなり便利に利用できている。