VSCode终端中文输入失败主因是环境变量未传递、shell初始化不全或Electron事件拦截;macOS需导出LANG和INPUT_METHOD,Windows须关闭微软拼音旧版兼容模式并禁用ConPTY,Linux/WSL2应切换fcitx5且禁用shell integration。

VSCode终端能输入中文,但90%的失败不是因为没装输入法,而是环境变量没传进去、shell初始化不完整、或Electron层的事件被拦截了。
macOS:INPUT_METHOD 和 LANG 必须显式导出到 ~/.zshrc 或 ~/.zprofile
VSCode终端默认以 login shell 启动(即 zsh -l),但它不会自动加载图形会话里的环境变量。哪怕你在 GUI 中用 Squirrel 输入法正常,终端里仍可能空白。
-
echo $SHELL和ps -p $$确认当前是zsh;如果不是,先在 VSCode 设置中搜terminal.integrated.defaultProfile.osx改对 - 在
~/.zshrc末尾加这两行(别放在return后面):export LANG=zh_CN.UTF-8 export INPUT_METHOD=ibus
- 用
fcitx5的用户再补三行:export GTK_IM_MODULE=fcitx5 export QT_IM_MODULE=fcitx5 export XMODIFIERS=@im=fcitx5
- 改完后必须关闭并重开整个 VSCode(只关终端不行);验证用
env | grep -i input\|lang
Windows:关掉微软拼音「旧版兼容模式」+ 禁用 ConPTY
微软拼音旧版兼容模式会吃掉 Ctrl+Space 等组合键,且阻止 IME 事件进入 VSCode 终端进程——这是最常被忽略的根源。
- 系统设置 → 时间和语言 → 语言 → 拼音选项 → 关闭「使用以前版本的微软拼音」
- VSCode 设置中搜
terminal.integrated.windowsEnableConpty,设为false - 禁用所有键盘增强工具:Punto Switcher、KeyPirinha、搜狗输入法的「快捷命令」模块
- 别用 Remote-SSH 直连;远程场景优先在目标机执行
code .启动 GUI 版本
Linux/WSL2:im-config 切换输入法框架 + 避免 sudo code
IBus 在 WSL2 下常无法正确转发 composition 事件,而 sudo code 会让渲染器以 root 运行,直接触发 IME 安全拦截。
- 卸载 IBus:
sudo apt purge ibus;装fcitx5:sudo apt install fcitx5 fcitx5-pinyin - 运行
im-config -n fcitx5设为默认;重启系统(不是仅注销) - 确保
~/.bashrc或~/.zshrc包含:export LANG=zh_CN.UTF-8 export LC_CTYPE=zh_CN.UTF-8
- 绝对不要用
sudo code启动;WSL2 用户可尝试:code --no-sandbox --enable-features=UseOzonePlatform --ozone-platform=wayland
shellIntegration.enabled 是 macOS/Linux 下最隐蔽的卡点
VSCode 1.84+ 默认开启终端 shell integration,它注入的控制序列会干扰 Squirrel/fcitx5 的 keyup 事件流,导致候选框不弹、输入卡顿——关掉立竿见影。
- 设置中搜
shellIntegration,把Terminal > Integrated > Shell Integration: Enabled设为false - 只需关闭再打开终端窗口(不用重启 VSCode)
- 这个开关对命令历史、路径跳转等影响极小,但对中文输入是决定性开关
真正麻烦的从来不是“装什么输入法”,而是 shell 初始化链、Electron 渲染器权限、X11/Wayland 事件转发这三层之间哪一环断了——查的时候得一层层往下剥,别一上来就重装输入法或 VSCode。


















