Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails以外の開発一般

VS Code: Vim拡張機能で日本語入力の暴走を止める

結論

結論から先に書きます。

VS Code + Vim拡張でかな漢字変換を使う人は、VS Codeのsettings.jsonファイルに"editor.editContext": falseを追加してください。

// ~/Library/Application Support/Code/User/settings.json
{
    // (略)
    "editor.editContext": false,
    // (略)
}

これにより、「変換した文言が2回入力される」「変換した文言がさらにCopilotオートコンプリートと衝突して日本語がぐちゃぐちゃになる」といった問題が修正されます。

経過

この1か月ほど、上述の「変換した文言が2回入力されることがある」「変換した文言がさらにCopilotオートコンプリートと衝突して日本語がぐちゃぐちゃになることがある」という問題がVS Codeで頻発して困っていました。

問題発生時の環境

  • VS Code: 1.105.1
Version: 1.105.1
Commit: 7d842fb85a0275a4a8e4d7e040d2625abbf7f084
Date: 2025-10-14T22:33:36.618Z
Electron: 37.6.0
ElectronBuildId: 12502201
Chromium: 138.0.7204.251
Node.js: 22.19.0
V8: 13.8.258.32-electron.0
OS: Darwin arm64 25.0.0
  • Vim拡張機能: v1.31.0
  • Google IME: 2.31.5840.1

Vimでiaなどで入力モードにした最初の段階で起きることが多いのですが、必ず起きるとは限らない点が厄介でした(問題を動画としてキャプチャしようとしたのですが、欲しいときに再現できなかったため諦めました)。

とかくこうした日本語IME固有の問題は英語圏でググってもろくに情報が見つからないことが多いので手こずりそうな予感がしていたのですが、その通りでした。しかも問題の再現が難しいうえに、エラーメッセージを出さないこの手の問題は「バグった」「暴走した」「発狂した」など表現がバラつきがちなので検索キーワードをあれこれ変えて探す必要があります。

当初はGitHub Copilotのオートコンプリートの問題かと思って、合間を見てはオートコンプリート周りの設定をさんざん調べたのですが、空振り。

GPT-5に相談したところ、以下を追加すると解決するかもしれないとのことでしたが、これもハズレでした。

    "editor.acceptSuggestionOnEnter": "off",
    "editor.tabCompletion": "on",

しまいにはVS Codeを完全に削除して再インストールし、VimやCopilotオートコンプリートを含む最小限の拡張機能をセットアップしたのですが、それでも現象が止まりませんでした。


そして、ふと思ってVim拡張機能自体をオフにしてみたところ、まったく起きなくなることにやっと気づきました。Vim拡張が問題だったのか!

VSCodeVim/Vim - GitHub

リポジトリのissueをIMEで検索したところ、以下のissueが見つかりました。

参考: The first character is repeated when inputting Chinese characters · Issue #9680 · VSCodeVim/Vim

早速settings.jsonに"editor.experimentalEditContextEnabled": falseを設定してみました。

ついでにこの情報がXにないかどうかをチェックしたところ、何と入れ違いでつい最近このコンフィグがeditor.editContextにリネームされていた(#251211)ことを知りました。情報ありがとうございます🙏

なお以下のissueによると、この問題は中国語IMEでも起きていたとのことなので、IMEの種類は無関係とみなしてよさそうです。

参考: There is an exception when inputting Chinese characters in the middle of a double-label punctuation mark · Issue #9709 · VSCodeVim/Vim

おまけ

ついでに、VS Codeのsettings.jsonにeditor.accessibilitySupport: "on"を追加しておくと、CopilotのオートコンプリートやAIが作業を終えたときに軽く音が鳴るようになります。好みはあるかと思いますが、私は便利だと思います。

"editor.accessibilitySupport": "on",

関連記事

【インストール不要】VS Code Live Shareで同時編集可能な議事録環境を顧客と共有する

VS Code: git pull → commit → pushを キー操作一発で実行する(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。