vscode中文输入失效主因是事件流被截断或环境变量未生效,需分平台配置:windows关微软拼音旧版兼容模式并禁用conpty;macos在~/.zshrc导出lang和input_method;linux/wsl2改用fcitx5并正确注入环境变量。

VSCode 终端和编辑器里中文输入法不工作,不是没装输入法,而是事件流被截断或环境没接上。 直接改 settings.json 里的 editor.* 选项基本无效,得从系统输入法框架、VSCode 启动方式、环境变量三层下手。
Windows:关掉微软拼音旧版兼容模式 + 禁用 ConPTY
这是 Windows 用户最常卡死的点。旧版兼容模式会吃掉 Ctrl+Space,并阻止 IME 事件进入终端进程。
- 系统设置 → 时间和语言 → 语言 → 拼音选项 → 关闭「使用以前版本的微软拼音」
- VSCode 设置中搜索
terminal.integrated.windowsEnableConpty,设为false - 禁用所有键盘增强工具:Punto Switcher、KeyPirinha、搜狗输入法的「快捷命令」模块
- 别用 Remote-SSH 直连;远程场景优先在目标机执行
code .启动 GUI 版本
macOS:导出 LANG 和 INPUT_METHOD 到 shell 配置
VSCode 终端默认以 login shell 启动,但不会继承 GUI 会话的环境变量。哪怕你在桌面用 Squirrel 正常,终端里仍可能空白。
- 确认当前 shell 是 zsh:
echo $SHELL和ps -p $$ - 在
~/.zshrc末尾添加(注意顺序,别放在return后):export LANG=zh_CN.UTF-8export INPUT_METHOD=ibus - 用 fcitx5 的用户再加三行:
export GTK_IM_MODULE=fcitx5export QT_IM_MODULE=fcitx5export XMODIFIERS=@im=fcitx5 - 改完后必须关闭并重开整个 VSCode(只关终端不行)
Linux / WSL2:强制用 fcitx5 + 环境变量注入 + 正确启动方式
IBus 在 WSL2 下常无法转发 composition 事件;fcitx4 在 Wayland 下已失效;Ubuntu 22.04+ 必须用 fcitx5。
- 卸载旧输入法:
sudo apt purge ibus fcitx fcitx-bin fcitx-config-gtk - 安装 fcitx5:
sudo apt install fcitx5 fcitx5-pinyin fcitx5-configtool - 在
~/.pam_environment中添加(不加export):GTK_IM_MODULE=fcitx5QT_IM_MODULE=fcitx5 - 注销重登录,运行
fcitx5-configtool勾选「在 Wayland 下启用」 - 从已激活 fcitx5 的终端中启动 VSCode:
env GTK_IM_MODULE=fcitx5 QT_IM_MODULE=fcitx5 code --no-sandbox
编辑器内候选框错位或不跟随光标
这不是输入法没装好,是 Electron 渲染层与 IME 框架合成失败。尤其在 Linux/Wayland 或高 DPI 屏幕下高频出现。
- VSCode 设置中搜索
editor.imeCompositionWindow,设为true(需 VSCode ≥ 1.85) - Linux 用户加启动参数:
code --enable-features=UseOzonePlatform --ozone-platform=wayland - Windows 用户若仍异常,可临时试
code --disable-gpu,但别长期依赖 - 禁用所有第三方键盘增强工具——它们会 hook 输入事件并干扰
onCompositionStart生命周期
真正难调的从来不是“能不能输中文”,而是“为什么有时候能、有时候不能”。多数情况是环境变量漏了一项、启动方式不对、或者某个后台进程劫持了输入事件链。每次排查前先确认:是否重启了 VSCode 全局进程?是否从正确终端启动?是否关掉了所有冲突软件?这些细节比任何配置都关键。











