all-ext.el:対象行を絞り込んでからまとめて編集するM-x allを超強化!occurと融合&anything・helmと連携
お久しぶりです。
みなさん、M-x allって知ってますか?
M-x package-install all
でインストールできるのですが、これはM-x occurのように正規表現にマッチする行を表示します。
occurとの違いは表示結果を書き換えれば、該当部分が自動的に書き変わることです。
ユースケースとしては、編集対象行を絞り込んでから、置換やrectangle系コマンドで一気に編集するって感じです。
便利なので以前から重宝しています。
ただ、occurより劣る点としては、対象行の行番号が出ていない点と、M-g M-n (next-error)とM-g M-p (previous-error)で移動できない点です。
(union all occur)
occurで絞り込んだはいいけれど、その結果をやっぱり編集したいという場合に改めてM-x allを実行するのは面倒ですね。
そこで、拙作all-ext.elの出番です。
MELPAに登録してあるので
M-x package-refresh-contents M-x package-install all-ext
でインストールしてください。
packageについては以下の設定が必要です。
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
all.elがインストールされていないならば同時にインストールされます。
(require 'all-ext)
のみで使えます。
ついでにauto-install.elなどもMELPA経由でインストールできるようにしました。
all-ext.elをインストール後、いつも通りM-x allを実行してください。
M-x occur同様行番号がついていることがわかります。
そしてM-g M-nやM-g M-pを実行してください。
該当行にジャンプできるようになっています。
*All*バッファからもC-c C-cで該当行にジャンプできます。
これでだいたいM-x occurの置き換えはできたことでしょう。
この時点で書き換え可能なoccurとなりました。
anythingやhelmから使う
今のemacsで検索といえば、anythingやその後継となるhelmを使ってる人も多いでしょう。
M-x anything-occur、M-x anything-c-moccur-occur-by-moccur、M-x helm-occurでMigemoつきでガンガン絞り込めるのは爽快としか言いようがありません。
これらで特定の行を絞り込んだら、その結果を編集したいときもあります。
そのとき、anything-resumeなどで次々と見ていくのは面倒で非効率的です。
ならばいっそのことanythingやhelmで表示されている内容を*All*に放り込めないかと思いました。
M-x anything-occurやM-x helm-occurで絞り込んだ後にC-c C-aを押すと、表示内容による*All*バッファが作成されます。
あとは*All*バッファを編集して元のバッファに反映させてください。
occurだけでなく、行番号とその行の内容を表示しているanything・helmコマンドならばなんでも使えます。