はじめに
一括検索・置換のようなことをやろうとすると、
moccur や all.el といったキーワードはすぐに検索に引っかかるけれども、
まとまった記述を見つけられなかったので、
ここに改めてまとめてみることにした。
参考リンク
- emacsで一括検索と一括置換 | miyazakikenji
- Emacs で wdired と moccur-edit を使っていない人は(ry - Higepon’s blog
- Emacsでmoccur-grepとmoccur-editからagとwgrepに移行したら爆速で快適すぎる - kotatu.org
- all-ext.el:対象行を絞り込んでからまとめて編集するM-x allを超強化!occurと融合&anything・helmと連携 - (rubikitch loves (Emacs Ruby CUI Books))
- helm-c-moccurの代わりにhelm-occurを使うようにした - $shibayu36->blog;
- Emacs - 最近のOccur modeについて - Qiita
- EmacsWiki: color-moccur.el
- EmacsWiki: wdired.el
- mhayashi1120/Emacs-wgrep
シチュエーション別
カレントバッファ
occur
Emacs 24.1 以降の occur には編集機能がそもそも備わっているようなので、
あらためて拡張を入れる必要はない。
occur バッファで e を入力すると編集モードに移行する(occur-edit-mode)。
他のメジャーな拡張と異なる挙動として、編集内容はそのまま元のバッファに反映されている。
C-c C-c で編集を終了する(occur-cease-edit)。
color-moccur + moccur-edit
color-moccur には occur-by-moccur という、
カレントバッファを対象に moccur を実行する機能があるので、
そちらを利用するという手もある。
個人的には、操作性の統一という面でこちらを使ったほうがいいと思う。
具体的な操作は「全バッファ」の項の color-moccur + moccur-edit と同じものが使える。
全バッファ
color-moccur + moccur-edit
M-x moccur の結果バッファで r を押すと、編集可能になる。
編集を反映させるには C-c C-c、破棄するには C-c C-k を入力する。
編集を反映させても、直ちにファイルに変更が書き込まれるわけではなく、
該当ファイルのバッファに変更内容が反映されるのみ。
適宜 save-some-buffers(デフォルトは C-x s)を実行する等で変更を保存する必要がある。
ファイル
ag と wgrep-ag の組み合わせが最も使いやすいと思う。
ag や grep の結果バッファで C-c C-p (変更可)を押すと、編集可能になる。
編集を反映させるには C-c C-c、破棄するには C-c C-k を入力する。
編集を反映させても、直ちにファイルに変更が書き込まれるわけではなく、
該当ファイルのバッファに変更内容が反映されるのみ。
ファイル・ディレクトリ名
wdired が使える。
dired バッファで r を押すと編集可能になる。
ファイルやディレクトリのリネームはもちろん、
ファイル名に任意の相対・絶対パスを追加することで、移動も可能である。
編集を反映させるには C-c C-c、破棄するには C-c C-k を入力する。
こちらの編集は 即座にファイルシステムに反映される。
実際の設定例
occur や moccur については、検索結果をリアルタイムで見られるように、helm インタフェースを使うように設定して使っている。
isearch で検索していたが一覧で見たくなったので、
helm-moccur で該当箇所を確認し、
編集したくなったら moccur バッファを開く、というようなフローを実現できるように設定している。
occur, moccur 関連
- dot-emacs/inits/22_moccur.org at master · yewton/dot-emacs
- dot-emacs/inits/25_helm-moccur.org at master · yewton/dot-emacs