VS Code でのフォルダ検索（置換）のまとめ

# 何故今更？
- Encode が混在しているフォルダ内での検索方法を探した際の調査結果の共有です
- 結論
    - 該当する Encoding に設定を切り替えつつ、全検索を繰り返す。

※良い方法があれば教えて欲しいです。

# 環境
VS Code 1.58.2

# フォルダ検索・置換の関連ショートカット一覧
|概要|short cut|補足|
|-|-|-|
|検索|Ctrl + Shift + F|Shift 無ければ、アクティブファイル内|
|置換|Ctrl + Shift + H|（同上）<br>複数ファイルを一気通貫置換は便利だけど、最近使う機会は無い・・|
|詳細検索<br/>「検索に含める」<br/>「除外するファイル」|Ctrl + Shift + J||
|大文字と小文字の区別|Alt + C||
|単語単位|Alt + W||
|正規表現|Alt + R||
|設定|Ctrl + ,|あとは、変えたい設定の関連キーワード入れるだけ<br>例）encoding, language, etc.
|閉じる|Ctrl + W|現状のTabを閉じる|
|再度開く|Ctrl + Shift + T|検索結果を閉じて、あ、もう一回って時に便利|
最近は、ショートカットが統一されてること多くて有難いですよね。 試せば使えるってのが多くて

https://code.visualstudio.com/docs/getstarted/userinterface#_filtering-the-document-tree

# 検索関連で確認しておくと便利な設定
他にもいろいろあるので、"search" で一通り眺めてみるのも有り

|概要|検索用文字列|補足|
|-|-|-|
|詳細検索|.exclude|"." 入れると Files: Exclude, Search: Exclude がすぐ出る![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/dadff10d-87e3-4a44-9b0f-034448978ce9.png)|
|結果表示順|search order|Hit順に並べたりできる![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/ac6e67bc-8611-eb96-0741-75c22302db49.png)| 
|検索設定の再利用|search prior|履歴使えば要らないかも![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/f8bb16d5-2f70-7544-a120-664e70e067d8.png)|
|Double Click Behavior|search double|画面大きいなら openLocatoinToSide も便利 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/ad4dd270-8b32-4798-e35d-e8b57aec3caa.png)|
|Git設定検索|search ignore|Git ignoreファイルを検索したい場合に![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/ebb43766-edfc-1fac-69e3-c00bdaa9fe11.png)|

# 詳細検索 (Advanced Search Options) 
- 検索内容の制約を指定することで、検索結果を制御出来ます。  
    - 「含めるファイル」「除外するファイル」の設定をすることで検索結果に制約をかけられる。
    - 「含めるファイル」では、開いているファイルのみのオプション有り
    - 「除外するファイル」も同様に file.exclude/search.exclude の設定を反映する設定有
    - [指定方法](https://code.visualstudio.com/docs/editor/codebasics#_advanced-search-options)
        - *‎ パス 内の 1 つ以上の文字と一致する‎
        - ? ‎パス セグメント内の 1 文字に一致する‎
        - ** ‎任意の数のパス セグメントに一致する (なしを含む)‎
          - ex.) **/obj ⇒　どっかの階層下にある obj フォルダに合致
        - {}‎ 条件をグループ化する (たとえば、すべての HTML ファイルとテキスト ファイルに一致する)‎
            - ex.) {\*\*/\*.html, \*\*/\*.txt}
        - []‎ 一致する文字の範囲を‎‎宣言‎‎するには
            - ex.) [0-9]example ⇒ 0example, 1exmaple, ...

https://code.visualstudio.com/docs/editor/codebasics#_advanced-search-options

## 利用例：開いているファイルのみのオプション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/48cac2bd-61ef-1a93-5084-658b62402ddb.png)
## 利用例：フォルダ名、ファイル名で「除外するファイル」を設定
「含めるファイル」も同様なので省略
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/895b6095-a302-8612-c39f-5c3e30af7037.png)
## 利用例：file.exclude 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/d2d5c1e0-8e7f-ee07-2a24-413654c9b3da.png)
## 利用例：search.exclude 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/99d8723b-9a3b-5487-2b5c-e7a0c145d06a.png)

# 検索結果に過不足があった場合の対処法
- 不足時は以下を確認
    - file.exclude/search.exclude などの設定に含まれていないか？
    - Git Ingore 系設定じゃないか？
    - 対象ファイルの Encoding が合っていないのでは？
- 多過ぎ
    - 詳細検索を使ってフィルターする
    - 結果表示順を変えてみる

# 閑話休題：混在エンコード環境での検索の為に試したこと
結論として、見つけられなかった訳だけど、試したことは以下。
Auto Guess Encoding を利用して検索してくれる機能ぐらいは今後出てこないかなぁ
## Files:Encoding を切り替えて確認
- 基本は該当 Encoding 単位でしか見つからない。
- UTF8/UTF8 with BOM みたいに、共通 Encoding 扱いになるものもある。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/972e16b6-1f67-8ec0-2309-09beb59d121a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/275c04d9-ea49-0852-15c6-7b5c42f190a7.png)

## ワークスペース設定で、エンコードをそれぞれに追加して確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/1aab94c8-3d53-6392-36f0-25a94800ed28.png)

- 検索結果影響なし
    - 結局はこの話ですね。Auto Guesss Search Encoding みたいな設定が出てこないと無理だろうけど、需要も厳しいかなぁと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/fca2c579-f73a-98dc-3e29-989900faab3e.png)

# あとがき
RTOS関連の開発をやっていた頃は Vi や秀丸で編集しており、複数ファイルの置換は秀丸マクロを作って実行していたものです。それが、今ではこんな素晴らしい Tool が OSS で開発されている、というのが本当に感動ですね。
組み込みの世界では未だに Git や VS Code を知らない人達が居たので、そういう人達に布教して日本の製造業を復興したいものです。

TypeScript は Office Scripts の為に少しずつ勉強しているところなので、いつかは何か貢献出来るといいなぁ


https://github.com/Microsoft/vscode