概要
ぐぐるとgrep-edit.el
やmoccur-edit.el
の使い方出てくるけど、複数行の変更が出来なかった。んだけど拡張使わずに実現する方法を見つけたので備忘録的に書く。
やり方
置換したい対象のファイルを選択する
M-x find-dired
Run find in directory: /path/to/dir/
Run find (with args): -type f
Run find in directory:
とRun find (with args):
はemacsのメッセージ。その横が自分の入力。-type f
以外にも-name "*php"
等、find
のオプションを使う。
これを実行すると、find-grep
の条件にあったファイルがリストアップされる。この中から置換するファイルを選ぶ。全部置換するなら*s
とタイプするとすべてのファイルが選択出来る。
置換する
Q
を押してdired-do-query-replace-regexp
を呼び出す。置換前文字列と置換後文字列を入力する。改行を入力するにはC-q C-j
で入力する。これは普通の置換と同じ。
実行後は普通の置換と同じくy
で置換を実行、n
で実行せず次、!
でそのバッファのヒットした文字列全部置換。普通の置換と違うのは、複数ファイル全て問答無用で置換したい場合はY
を押す。
保存する
これだけだと保存されてないので保存する。M-x ibuffer
呼び出して、*u
で変更したけど保存してないbufferを選択して、S
で保存、D
でそのバッファのkill。
以上
参考
大体一つ目のページを訳しただけ
- http://ergoemacs.org/emacs/find_replace_inter.html
- http://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html
ひとりごと
日本語でぐぐってもgrep-edit.el
, moccur-grep.el
の情報ばっかりだったけど、英語でぐぐったら一発で見つかった。しかも拡張elisp使わず出来るんやん。今までモダンなelispとかに頼りきってたので、find-dired
, ibuffer
とか初めて使った。勉強なった。