Windows Terminal上のPowerShellで「Alt+`」やLANG2を押すと@が入力される問題に対処する

Windowschat_bubble0

環境は以下。

  • Windows 11 25H2
  • Windows Terminal 1.23.13503.0
  • PowerShell 7.5.4
  • IME: Google日本語入力 2.32.5990.0
  • キーボード: 英語配列のキーボード

上記の環境で「Alt+`」やLANG2が押された時にPowerShell上に@が入力される問題が発生しました。「Alt+`」は通常はIMEのオンオフのトグルキーで、LANG2はIMEのオフを行うキーです。IMEをオンにするLANG1ではこの問題は発生しませんでした。また、この問題はWindows Terminal上でのみ発生し、VSCodeのターミナル上では発生しませんでした。

いろいろ試したところ、「Alt+`」の問題はMicrosoft IMEでも発生し、LANG2の問題はGoogle日本語入力でのみ発生することが分かりました。また、「Alt+`」の問題については「Alt+`」を押した際に必ずIMEのトグルと共に発生し、LANG2の問題についてはIMEのオフが機能する最初だけは@が入力されず以降の何も起こらない場合の押下で@が入力されました。

同じような問題が2021年時点でPSReadLineのリポジトリで報告されていました。またQiitaとZennの記事で良さげな対処法が紹介されていました。

Zennの記事にあるようにWindows Terminalの設定でキーに「背景の不透明度を0%上げる」を割り当てることが無難な対処法だと思われます。この設定をするとIMEのオン/オフは問題なく機能し、Windows TerminalやPowerShellには影響はありません。0%になっているのは、おそらくWindows Terminalのsettings.jsonにプロパティを追加する用なのかなと。

今回の問題をGPT‑5.2 Thinkingに投げたところ、問題の切り分け作業をした後に、settings.jsonでキー入力を「\u0000」つまりNULLに割り当てることを提案され、それは実際に問題の対処法として機能はしました。ただキーボード入力を受け取るプログラム次第ではNULL(Ctrl+@)に特別な意味がある可能性が無いわけではないらしく、結局はPowerShellに入力を渡していないように見える「背景の不透明度を0%上げる」に落ち着きました。

藤乃音りょう