Visual Studio Code の日本語問題まとめ

この記事は、Visual Studio Code 本体や使用されているライブラリで、発生する日本語 (CJK関係) の問題と対応策をまとめたものです。

この記事にはまとめませんが、CJK 特有の問題は完全に放置されているわけではなく、むしろ対処された問題のほうが多いことに注意してください。

## バックスペース問題
**概要**
macOS において、バックスペース入力時に `backspace (U+0008)` 制御文字が別に紛れ込む。
初期設定で制御文字を確認できないため、気づかないうちに markdown-preview 等での文字化け、この制御文字を含むテキストの提出を行ってしまう。

**原因**
chromium による[問題 714771](https://bugs.chromium.org/p/chromium/issues/detail?id=714771) (解決済み) が原因。Electron の [#9173](https://github.com/electron/electron/issues/9173) で v.1.7.2 に解決が期待されたが、Visual Studio Code が使用する 3.0.13 現在で解決されていない。~~2.0.x で解決される予定。~~VSCode への適用時期は未定。

**対応策**
フォーマット系拡張機能として、問題の制御文字を取り除く [Remove backspace control character](https://marketplace.visualstudio.com/items?itemName=satokaz.vscode-bs-ctrlchar-remover) 拡張機能を使用する。

**トラック**
Visual Studio Code

+ [#37114](https://github.com/Microsoft/vscode/issues/37114), [#24981](https://github.com/Microsoft/vscode/issues/24981)

chromium

+ [714771](https://bugs.chromium.org/p/chromium/issues/detail?id=714771)

Electron

+ [#9173](https://github.com/electron/electron/issues/9173)

## EUC-JP のチルダ問題
**概要**
`EUC-JP` 文字エンコードを使用しているとき、キーボードの "～" を入力すると 「全角チルダ」 として保存される。例として秀丸は 「波ダッシュ」 に対応し 「全角チルダ」 を表示しないので文字化けが起こる。

**原因**
VSCode が使用する [iconv-lite](https://github.com/ashtuchkin/iconv-lite) で正しく(?)マッピングされていないのが問題。根強い 「波ダッシュ」、「全角チルダ」 の[問題](https://ja.wikipedia.org/wiki/波ダッシュ#Unicodeに関連する問題)に関連する。またこれらの問題はこの[質問/回答](https://teratail.com/questions/63777)が大変参考になる。

**対応策**
なし。
あきらめて UTF-8 を..

**トラック**
Visual Studio Code でこの問題はトラックされていない。

iconv-lite

+ [#145](https://github.com/ashtuchkin/iconv-lite/issues/145)

## 検索するときエンコードを自動的に判別しない問題
**概要**
エンコードを指定して検索することはできるが、`files.autoGuessEncoding` 設定によって制御できない。

**原因**
依存先の検索機能の制限から `files.autoGuessEncoding` を実行できないため。

**対応策**
拡張子別に設定をスコープできる `[]` 等を活用しながら、適宜 `files.encoding` 設定を適応する。

**トラック**
Visual Studio Code

+ [#34315](https://github.com/Microsoft/vscode/issues/34315)

## 統合ターミナルで英語以外を検索できない問題
**概要**
統合ターミナルで英語以外を検索することができない。

**原因**
VSCode が使用する [xterm.js](https://github.com/xtermjs/xterm.js/issues/1103) が対応していないことが原因。

**対応策**
なし。

**トラック**
Visual Studio Code

+ [#37440](https://github.com/Microsoft/vscode/issues/37440)

## 単語を正しく認識しない問題
**概要**
`cursorWordStartLeft` コマンド等による単語移動が想定した移動ではない。ダブルクリック時の選択範囲が意図した範囲ではない。`editor.wordBasedSuggestions` 設定を適用時の提案リストに単語ではなく文が表示される。などの問題が発生する。

**原因**
日本語を解析する機能が、VS Code には実装されていないことが原因。なお、カーソルの単語移動については英語以外を想定しないデザインと明言している ([#25208](https://github.com/Microsoft/vscode/issues/25208))。

**対応策**

+ `cursorWordStartLeft`等の移動または選択範囲の場合
    + [Japanese Word Handler](https://marketplace.visualstudio.com/items?itemName=sgryjp.japanese-word-handler) 拡張機能を使用する。
    + `editor.wordSeparators` 設定に `、。「」【】『』（）！？　てにをはがのともへでや` あたりを追加する。

`Japanese Word Handler` を利用する場合は、単語移動における精度が上昇するが、テキストをダブルクリックした時の選択範囲に影響しない。`editor.wordSeparators` 設定を利用する場合は、精度が下がるが、テキストの選択範囲にも影響する。

+ 提案リストの場合

なし。

**トラック**
Visual Studio Code
単語移動

+ [#25208](https://github.com/Microsoft/vscode/issues/25208)

提案リスト
Visual Studio Code でこの問題はトラックされていない。

## 開いたファイルが文字化けするとき
**概要**
エンコードのデフォルト設定である `UTF-8` ファイル以外を開くと、文字化けする。

**原因**
自動エンコード機能は実装されているが、あくまで 「推測」 なので必ずしも正しいものを選択しない。そのため、デフォルトで無効化されている。

エンコードの検出には [jschardet](https://github.com/aadsm/jschardet) が使用されている。

**対応策**
`"files.autoGuessEncoding": true` を設定する。

**トラック**
Visual Studio Code

+ [#5388](https://github.com/Microsoft/vscode/issues/5388), [pull#10013](https://github.com/Microsoft/vscode/pull/10013), [pull#21416](https://github.com/Microsoft/vscode/pull/21416)

## 表示言語が英語のとき (日本語にする)
**概要**
(問題?)
UI の言語機能が外部の拡張機能に分離されたため、本体をインストール後に Language Pack を導入する必要がある。

**対応策**
[Japanese Language Pack for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja) を導入する。インストール後は、`display language` コマンドを実行して `locale:ja` に設定を変更する。

次のような通知は、右上の歯車マークから表示しないようにできる。

![asdf](https://qiita-image-store.s3.amazonaws.com/0/76740/529ac543-c235-f85a-685b-2c865018a3a6.png)