数日前からGeminiCLIと連携するターミナルをiTerm2からVSCodeに変更した。
それまでは、Obsidian、CotEditor、iTerm2とGeminiCLIという組み合わせだったのだが、CotEditorもiTerm2も捨てがたいが、統合環境としてのVSCodeを挟むとより統合的にObsidianにたくわえたデータの利活用のためのGeminiCLIが機能できるということだった。
ところが、ターミナルに絵文字のような文字化けが大量に出現する現象が起きた。ドラッグしてコピペしてエディターなどに引っ越すと文字化けの問題なく表示されるのだが、ターミナルの画面が乱れて、とんでもなく煩わしくなり、実用的ではないことが理解できた。
結果として、VSCodeではなくiTerm2に復帰することもあり得たが、サーバ管理をしないレベルではなく、ローカルなコーディングにとどまる仕様法からすると、VSCodeで処理を継続する合理性があった。
ところが、Geminiのアドバイスをみても、決定的な原因があって一発解消はありえそうにない事がわかった。やりかとして、いくつかの問題点を「叩いて潰す」しかないと考えられた。
- まずはフォント問題:
- フォントの確認: VSCodeの設定 terminal.integrated.fontFamilyに、日本語を正しくサポートするフォント(例:Menlo, Monaco, Courier New, monospace に加え、Hiragino Sans 等)が指定されているか確認する。:これは、そのように設定されていた。
- フォントの指定:terminal.integrated.fontFamilyに、日本語の等幅性が保証されているフォント(例:Menlo, Monaco, Courier New, Hiragino Sans GB, monospace)を明示的に指定する。:これは、そのように設定されていた。
- Unicode対応:terminal.integrated.unicodeVersionを 11 に設定する(古いバージョンだと絵文字や特殊文字で幅がズレるため)。:これは、そのように設定されていた
- エンコーディングの強制:設定 files.encodingが utf8 であることを確認し、ターミナル自体のロケールを export LANG=ja_JP.UTF-8で再読み込みする。
- ~/.zshrcを編集して、ファイルの末尾に export LANG=ja_JP.UTF-8 を追記する。
- 次にVSCodeのターミナル設定の問題:
- VSCodeの settings.json において、以下の設定を行うことで、外部ターミナルとして iTerm2 を呼び出すことが可能になる。
- "terminal.external.osxExec": "iTerm.app"`
- これにより、VSCodeから `Shift+Cmd+C` でターミナルを立ち上げる際に、標準の `Terminal.app` ではなく `iTerm.app` が起動するようになる。
- VSCodeのレンダリングエンジンの変更:
- アクセラレーションのオフ:
- terminal.integrated.gpuAcceleration` を `off` に設定する。
- GPUによる高速描画をオフにし、CanvasまたはDOMベースの描画に切り替えることで、フォント幅の計算ミスを抑制できる場合がある。
以上の変更によって、とりあえずは、VSCodeのターミナルにおける文字化け問題は解決できたと思うのだが・・・。