#大量のファイルを一気に置換
日々の業務で数十個に及ぶファイルを書き換えなきゃいけない。なーんてことありますよね。
そんなときはPHPSTORMを使おう。
##なにがいいの?
- 指定ディレクトリ以下を一気に置換してくれる。
- 正規表現を使ってざっくりと指定できる。(諸刃の剣
- 置換する部分をずらーっと並べて、置換したいラインだけ選択できる。
##どうやってやるの?
通常の置換は command + Rで出てきますが、
一括置換をする場合は Shift + command + Rです。
ショートカット変更してる場合はPreferences開いて、検索窓に"replace in path"と入力すれば多分でてきます。
##つかえる機能
Text to find
探すテキストを入れます。Optionsにチェックを入れる事で正規表現で検索したりもできます。
Replace With
Text to findで一致した部分に、ここで表記したテキストが置換されます。
Options (PHPSTORMのdocを雑に和訳)
Case sensitive
検索時に小文字と大文字の区別をつけます。
Preserve case
一致した文章の最初の文字と同じ形式にして置換します。
Replace withに"yourtest"と入れた時、MyTestはYourtestに置き換わります。
Case sensitiveかRegular expressionsにチェックが入っている場合は無効。
このオプションはReplace in Path(一括置換)の時のみ有効です。
Whole words only (多分はやい)
単語全体にマッチします。
スペース、タブ、句読点(カンマとかピリオドとかかな)や特殊文字で分割されている文字列などです。
*単語全体なのでcutで検索した場合はcutyやcuttingなどは引っかからなくなります。
Regular expressionsにチェックを入れてる場合は無効です。
Regular expressions
検索パターンが正規表現として扱われます。
チェックボックスの隣の[Help]を押せば正規表現のシンタックスが見れます。
Context
use this drop-down list to confine the search to a certain context, for example:
- anywhere (PHPSTORM7にはないぽい)
全部探します。
- In comments (PHPSTORM7だとComments only)
コメント部分のみ検索をかけます。他の部分では何も起こりません。(いいね
- In string literals (PHPSTORM7だとString literals only)
文字型の部分のみ検索をかけます。
$text = 'textここの文字型のtextだけ検索します'
- Except... (PHPSTORM7にはないぽい)
上のIn commentsとIn string literals以外です。
コメントアウトされている部分と文字型は検索対象にならないという事だと思います。
Scope
ここはざっくりいきます。
- Whole project
プロジェクト全体ですね。
- Recursively
ここに入力したディレクトリ以下全てを検索します。
- Custom
カスタムスコープを使って検索する。同じ階層にあるディレクトリを複数個やりたい時はここ使うっぽいです。詳しくはdocみてちょ。
File name filter
File maskを使って調べたいファイルの種類を限定できます。
.phpにするとphpファイルのみ検索がかかります。ワイルドカードには*と?を含みます。
複数指定する場合は、カンマでつなげてください。
.php,.html,.txt
### なんか良い使い方ない?
- スクレイピングしてきたHTMLがたくさんあって、しかもフッターのデザイン全部変えるのかよ、みたいな時
<!-- header start -->
<header>
div>ul>li>a
</header>
<!-- header end -->
みたいなパターンだと正規表現で一発解決ですね。
<!--header start[\s\S]*header end-->こんな感じのをText to findにぶちこんで、Replace withに
<!-- header start -->
<header>
nav>ul>li>a
</header>
<!-- header end -->
みたいなのを ワンライナー にして(?!)Replace withにいれてあげましょう。
実はワンライナーにするときに前の一括置換のときにRegular expressionにチェックが入っている場合、ワンライナーにしたいものをPHPSTORM上でコピーしてから
command + shift + Rで一括置換してくれると正規表現でワンライナー化したやつがText to findに生成されるんです。
これをReplace withに置いてあげればすぐですね。
(Text Areaでやる方法はないのかな、こわいです)