はじめに
一括検索・置換のようなことをやろうとすると、
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