環境
- Windows 10
- VS Code v1.35.0
概要
Ctrl
+ Shift
+ F
でワークスペースにあるファイルの文字検索、置換が行える。正規表現も使えるし、とても重宝していた。
しかし、デフォルト設定ままの場合、文字コードがUTF-8のファイルしかひっかからず、Shift-JISやEUC-JPが文字コードのファイルは抜け漏れてしまう。
どういうこと?
別々の文字コードを使った同じ文字列のファイルを3個用意して...
日本語の「チト」で検索してみる。
引っかかるじゃん!とおもったけど...
UTF-8とEUC-JPのファイルを閉じて再度検索してみると、
EUC-JPでひっかからなくなった。
なんで?
検索するときエンコードを自動的に判別しない問題
ここにすべてが書いてあった。
どうやら設定がデフォルトだと、全てのファイルの文字コードをUTF-8として開き、grepしているために引っかからない...とのことである。
だが、検索するとき文字コードを自動的に判別しないだけで、エディタでそのファイルの適切な文字コードで開けている状態であれば、UTF-8でなくても検索にはひっかかるようだ。上の例では、EUC-JPのファイルは、閉じて文字コードを指定しなかったためにUTF-8としてgrepし、ひっかからなかったが、Shift-JISのファイルはエディタ上でしっかりとShift-JISで指定してあげていたので、ひっかかった。
(基本的に半角アルファベットであれば、文字化けを起こすことはないので、grepに問題はないはず。)
対策
日本語をgrepしたいときには、引っかからないので、どうにかして検索する。
VS Codeでどうにかする
拡張子別には文字コードを指定できるようだけど、ファイルの量が膨大かつ、拡張子が同じでも文字コードが違うこともある環境だったのでそういうわけにはいかなかった。
今のところ、VS Codeで他ファイルと文字コードが異なるファイルをすべて開いて指定してあげるか、拡張子別に文字コードを指定するのを拡張子の数だけgrepする方法以外思いつかない。
ファイル数が少ない場合のみ有効。
面倒だし『VS Codeでどうにかする』のは正直オススメしない。
VS Codeだけで完結するなにか良い方法があれば教えてください。
あきらめて他ツールでどうにかする
###TresGrep
http://hp.vector.co.jp/authors/VA055804/TresGrep/
文字コードが異なっていても問題なくgrepできた。
感想
grepするときだけ別のソフトを開くのもなんかバカバカしいので、複数の文字コードがあっても検索できるようになってほしい。
過去の作業に不備のあった可能性が...
絶望と仲良く