Windows下VSCode终端能显示中文但无法输入,90%是PowerShell或Git Bash的locale和编码链未对齐:需在settings.json中配置PowerShell的$OutputEncoding为UTF-8、注入LANG/LC_ALL环境变量,并禁用硬件加速以解决IME事件透传冲突。

Windows 下 VSCode 终端能显示中文但无法输入,90% 是 PowerShell 或 Git Bash 的 locale 和编码链没对齐,不是输入法本身坏了。
PowerShell 终端里按键盘没反应或输不出中文
这不是输入法失灵,而是 PowerShell 启动时没正确设置控制台 I/O 编码,导致 Windows 输入法引擎(如微软拼音)无法与终端建立 UTF-8 通信通道。即使你用的是最新版 VSCode,只要 $OutputEncoding 还是 GBK,输入法就可能被静默降级为英文模式。
- 检查当前编码:在终端里运行
[console]::OutputEncoding,如果输出是System.Text.ASCIIEncoding或带gbk字样,就确认问题在此 - 强制设为 UTF-8:在 VSCode 的
settings.json中添加以下配置(注意必须用PowerShell作为默认 profile):"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()"] } } - 别用
chcp 65001临时切换——它只改代码页,不改 .NET 层的 Encoding 实例,输入法仍可能 fallback
Git Bash 终端里中文路径报错、输入卡顿或候选框不弹
Git Bash 默认依赖 LANG 和 LC_ALL 环境变量决定是否启用 UTF-8 模式。一旦这两个变量为空或设成 C,它就会拒绝加载中文输入支持,连微软拼音的候选框都拉不出来。
Windows 命令行编码与兼容规范。涵盖 GBK/UTF-8 编码、PowerShell/pwsh 互操作、Python/Node.js、Git 配置及代码生成规则。适用于 Windows 10/11 + MSYS2/Git Bash 环境下的所有命令行操作。
- 必须在 VSCode 的
settings.json中显式注入环境变量:"terminal.integrated.env.windows": { "LANG": "zh_CN.UTF-8", "LC_ALL": "zh_CN.UTF-8" } - 安装 Git 时务必勾选 “Use Windows' default console code page” —— 不勾选会导致底层 msys2 运行时无法识别 Windows 控制台 UTF-8 能力
- 绝对不要在
.bashrc里写export LANG=C,这是高频踩坑点;VSCode 启动的 Git Bash 不会读取你的用户.bashrc,只认环境变量
输入法候选框不弹、光标错位或按 Shift 切换失效
这是 VSCode v1.86+ 渲染器与 Windows 输入法框架(IME)事件透传冲突所致,尤其在终端获得焦点瞬间,Shift、Ctrl 等修饰键可能被编辑器拦截,未送达输入法服务。
- 临时验证:在终端里按
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools,看 Console 有没有Failed to connect to input method或IME process crashed - 绕过渲染器干扰:在
settings.json中加这两行(重启生效):"window.experimental.useSandbox": false, "disable-hardware-acceleration": true
- 系统级规避:进「设置 → 时间和语言 → 语言 → 中文 → 选项 → 微软拼音 → 常规」,关闭“允许我通过 Shift 键在中英文输入间切换”,改用
Win+Space
真正难搞的是 PowerShell + Git Bash + 微软拼音三者在不同 VSCode 版本下的组合行为——比如某次更新后 terminal.integrated.windowsEnableConpty 默认值变了,就会让 ConPTY 层丢掉部分 IME 事件。这类问题没法靠单个配置解决,得配合 Developer Tools 日志 + 系统事件查看器里的 TextInputFramework 错误一起定位。

















