この記事は Visual Studio Code 本体や使用されているライブラリで発生する日本語 (CJK関係) の問題と対応策をまとめたものです。
この記事にはまとめませんが、CJK 特有の問題は完全に放置されているわけではなくむしろ対処された問題のほうが多いことに注意してください。
バックスペース問題
概要
一部環境 (macOS) においてバックスペース入力時に backspace (U+0008)
制御文字が別に紛れ込む。
初期設定で制御文字を確認できないため、気づかないうちに markdown-preview 等での文字化け、この制御文字を含むテキストの提出を行ってしまう。
原因
chromium による問題 714771 (解決済み) が原因。Electron の #9173 で v.1.7.2 に解決が期待されたが、Visual Studio Code が使用する 1.7.9 現在で解決されていない。1.8.x で解決される予定。VSCode への適用時期は未定。
対応策
フォーマット系拡張機能として問題の制御文字を取り除く Remove backspace control character 拡張機能を使用する。
トラック
Visual Studio Code
+ #37114, #24981
chromium
+ 714771
Electron
+ #9173
EUC-JP のチルダ問題
概要
EUC-JP
文字エンコードを使用しているとき、キーボードの "~" を入力すると 「全角チルダ」 として保存される。例として禿丸は 「波ダッシュ」 に対応し 「全角チルダ」 を表示しないので文字化けが起こる。
原因
VSCode が使用する iconv-lite で正しく(?)マッピングされていないのが問題。根強い 「波ダッシュ」、「全角チルダ」 の問題に関連する。またこれらの問題はこの質問/回答が大変参考になる。
対応策
なし。
あきらめて UTF-8 を..
トラック
Visual Studio Code でこの問題はトラックされていない。
iconv-lite
+ #145
CJK を含む文字を正しくカウントできない問題
概要
「矩形選択」、「垂直カーソル移動」、「タブ スペースのフォーマット」 等が日本語を含むとき正しく機能しない。
原因
とても簡略すると主に文字を正しくカウントできていないことで、これらの相対的な位置を必要とする機能が失敗する。問題は根強く(?)、問題に対して投票が少ないため非常に優先度が低いとみられる。このため修正時期の予想がつかない。
対応策
なし。
トラック
Visual Studio Code
+ #9989, #22717, #39249, #41500, etc
単語を正しく認識しない問題
概要
cursorWordStartLeft
コマンド等による単語移動が想定した移動ではない。ダブルクリック時の選択範囲が意図した範囲ではない。editor.wordBasedSuggestions
設定を適用時の提案リストに単語ではなく文が表示される。などの問題が発生する。
原因
日本語を解析する機能が VS Code には実装されていないことが原因。なお、カーソルの単語移動については英語以外を想定しないデザインと明言している (#25208)。
対応策
+ cursorWordStartLeft
等の移動または選択範囲の場合
+ Japanese Word Handler 拡張機能を使用する。
+ editor.wordSeparators
設定に 、。「」【】『』()!? てにをはがのともへでや
あたりを追加する。
Japanese Word Handler
を利用する場合は単語移動における精度が上昇するが、テキストをダブルクリックした時の選択範囲に影響しない。editor.wordSeparators
設定を利用する場合は精度が下がるが、テキストの選択範囲にも影響する。
- 提案リストの場合
なし。
トラック
Visual Studio Code
単語移動
+ #25208
提案リスト
Visual Studio Code でこの問題はトラックされていない。
開いたファイルが文字化けする問題
概要
エンコードのデフォルト設定である UTF-8
ファイル以外を開くと文字化けする。
原因
自動エンコード機能は実装されているが、あくまで 「推測」 なので必ずしも正しいものを選択しない。そのためデフォルトで無効化されている。
エンコードの検出には jschardet が使用されている。
対応策
"files.autoGuessEncoding": false
を設定する。
トラック
Visual Studio Code
+ #5388, pull#10013, pull#21416
統合ターミナルで英語以外を検索できない問題
概要
統合ターミナルで英語以外を検索することができない。
原因
VSCode が使用する xterm.js が対応していないことが原因。
対応策
なし。
トラック
Visual Studio Code
+ #37440
-- 予定
ターミナルの文字化け 策:あり
翻訳 策:あり