0

私は比較的大きなコードベースを持っており、コード全体で同様の変更を行う必要があります。

私はこのような行をたくさん持っています

$options = new Options();

交換したい

$options = Options::getInstance();

しかし、いくつかの場所で私は持っています

$options = new Options('alternate_options_file.txt')

それら、私は放っておいてみたい。

また、今後もこのような変化が増えると思います。

すべてのファイルに手作業で触れることなく、コードベース全体でこの変更を行う方法が必要です。この場合、必要なものだけをキャッチする正規表現を簡単に作成できます。しかし、これにはもっと複雑なバージョンが登場するはずです。次のことができる一般的なソリューションが必要です。

  1. 変更する可能性のある場所のセットを見つける
  2. それらの一部を含めるか除外する
  3. 指定した場所で自動的に変更を加えます。

(resharperを使用したことを覚えています。これにより、変更されるすべての場所のリストが表示され、それらを含めたり除外したりできます。しかし、現在はPHPに取り組んでおり、以外のいくつかの置換を行いたいと思います。純粋なリファクタリング。)

今のところ、私の最善の策は、ackvimの内部から使用し、マクロを記録してから、:cnext必要に応じてマクロを使用して適用することです。しかし、おそらくもっと良い選択があります。

4

2 に答える 2

3

http://www.ibrahim-ahmed.com/2008/01/find-and-replace-in-multiple-files-in.html

Vimは、次のようにファイル間でインタラクティブにテキストを置き換えることができます。

:args **/*.php
:argdo %s/new Options()/Options::getInstance()/gec | update

また、これを試す前に、コードベース全体をコミットすることをお勧めします。リポジトリを台無しにしないように注意してください。

于 2012-07-04T17:13:12.770 に答える
0

sed パターンは

s/\$options = new Options();/\$options = Options::getInstance();/g

インプレースで適用するにはsed -i、Linux で実行するかsed -i.bak、BSD/Mac で実行してから、バックアップを削除します)。PHP ファイルに制限し、おそらく行のあるものだけに触れるには、これを試してください。

find . -name "*.php" | xargs grep -l "\$options = new Options();" | xargs sed -i 's/\$options = new Options();/\$options = Options::getInstance();/g'

ファイル名にスペースなどが含まれている場合は、試してくださいfind . -name "*.php" -print0 | xargs -0 sed ...

最初に必ずすべてをバックアップしてください。ソース管理 (右?) を使用していて、変更を行う前にすべてがコミットされている場合は、問題ありません。

于 2012-07-03T20:32:38.257 に答える