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コマンドならばなんでも使えます。

http://www.rubyist.net/~rubikitch/archive/all-ext-1.png

http://www.rubyist.net/~rubikitch/archive/all-ext-2.png