例えばリファクタリングしたいときにクラス名を一斉に変える時がある。その時に対応するファイル・ディレクトリ名を一斉置換したい時がある。
emacsで特定ディレクトリ以下の特定の名前のファイル・ディレクトリを抽出して、wgrepみたいに一括で変更したい
— 柴崎優季 (@shiba_yu36) 2013年12月25日
つ moccur-edit RT @shiba_yu36: emacsで特定ディレクトリ以下の特定の名前のファイル・ディレクトリを抽出して、wgrepみたいに一括で変更したい
— ひろせ31 (@hirose31) 2013年12月25日
@hirose31 moccur-editってファイル名ディレクトリ名の一括置換出来ましたっけ?
— 柴崎優季 (@shiba_yu36) 2013年12月25日
@shiba_yu36 あーファイル名とかすか!じゃ、wdiredでできるかな…
— ひろせ31 (@hirose31) 2013年12月25日
@hirose31 今wdiredで特定のファイルを1つずつ置換は普通にできてるんですけど、プロジェクト以下のSampleにマッチするファイル・ディレクトリをfindして、全て変えるってのができてないんですよねー
— 柴崎優季 (@shiba_yu36) 2013年12月25日
@hirose31 diredだとあるディレクトリ直下しかできないので...
— 柴崎優季 (@shiba_yu36) 2013年12月25日
diredの機能であるfind-name-diredと、dired中で置換を行えるwdiredを組み合わせたら出来るということが分かった。
- M-x find-name-dired (word)
- wdired-change-to-wdired-mode
- 置換(query-replace)
- 保存
find-name-dired
find-name-diredはfind-dired.elに含まれる機能で、emacsから名前でfind出来るやつ。標準で付いているのでインストールする必要はない。
またもっといろいろfindしたい時は、find-diredしたら良い。findのoptionを渡せる。
wdired
wdiredも24.3現在では標準で入っているようでした。紹介はファイルのリネームが超簡単 wdired / grep の検索結果を直接変更できる moccur-edit. - gan2 の Ruby 勉強日記あたりを参照に。
設定方法、keybindの例は以下のとおり。
;; wdiredの設定 (require 'wdired) (define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
これでdiredでrを押したら編集できるようになって、C-x C-sでセーブ出来る。