2011年11月21日月曜日

find-dired + dired-do-query-replace-regexpの便利な利用方法

emacsを使い始めて早や数年。このパワフルなエディタをようやく少しだけ使いこなせてきたかなと思う今日この頃。未だ2ヶ月に1度ほど、emacsを利用していて感動的な程便利な機能を発見する。いつまで経っても新しい発見のあるemacsの奥深さが、また楽しい。

今回、気づいた便利な機能は、find-diredコマンドとdired-do-query-replace-regexpコマンドの合わせ技。

find-diredは、findコマンドを実行して、コマンドの実行結果のバッファをDiredモードで開くコマンド。

dired-do-query-replace-regexpはdiredでマークしたファイルに対して、query-replace-regexpコマンドを実行してくれるコマンド。

query-replace-rexexp対象のファイルが複数あり、異なるディレクトリに散在しているときは、find-diredと組み合わせると、アッと言う間に文字列の置換ができてしまう。

例えば、fileA、fileB、fileCというファイルが、異なるディレクトリにあり3ファイルに含まれる文字列を置換したい場合。まず、find-diredをrootディレクトリに対して"-name"オプションで実行し、fileA、fileB、fileCを含むようにdiredを表示する。そこで、ファイルをマーク(diredのバッファで 'm'キーを押下)して、'Q'キーを押すとマークしたファイルの文字列をクエリ形式で置換できる。
 
   root
   └───src
           ├───client
           │         └───system_web
           │                     └───fileB
           ├───images
           │         └───fileA
           └───fileC


find-diredの便利さは、複数のディレクトリにファイルが散在している場合でも、それらのファイルが仮想的に1つのディレクトリ以下にあるものとして扱えること。