Emacsで拡張を使わず複数ファイルの複数行に渡る置換を行う

  • 53
    Like
  • 0
    Comment
More than 1 year has passed since last update.

概要

ぐぐるとgrep-edit.elmoccur-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。

以上

参考

大体一つ目のページを訳しただけ

ひとりごと

日本語でぐぐってもgrep-edit.el, moccur-grep.elの情報ばっかりだったけど、英語でぐぐったら一発で見つかった。しかも拡張elisp使わず出来るんやん。今までモダンなelispとかに頼りきってたので、find-dired, ibufferとか初めて使った。勉強なった。