中文语言包会强制fallback到系统gui字体导致代码显示异常,必须在settings.json中显式配置editor.fontfamily和terminal.integrated.fontfamily,中文字体置于英文字体之后,并注意工作区设置、插件及远程环境的覆盖问题。

中文语言包会偷偷改 editor.fontFamily
装完 Chinese (Simplified) Language Pack 后编辑器字体变细、中英文不对齐,不是你配错了,是语言包在你没设 editor.fontFamily 时,自动 fallback 到系统 GUI 字体(比如 Windows 的 Microsoft YaHei、macOS 的 PingFang SC)。这些字体非等宽、无 hinting、不支持连字,纯属“能显示中文”但“不该用在代码里”。
必须显式覆盖 language pack 的字体 fallback
别依赖语言包自带的“默认”,直接在 settings.json 里硬写你想要的字体栈:
"editor.fontFamily": "'Fira Code', 'JetBrains Mono', 'Cascadia Code', 'Microsoft YaHei', 'PingFang SC', 'Noto Sans CJK SC', 'monospace'"- 中文字体必须放在英文字体之后——前面的等宽字体负责英文/符号,后面的中文字体只兜底中文字符
- 每个含空格的字体名必须用英文单引号包裹,逗号后加空格,末尾的
'monospace'不能删 - 改完保存,旧标签页可能不刷新,手动重开或按
Ctrl+R(Windows)强制重绘
terminal.integrated.fontFamily 也要同步设
语言包不动终端字体,但很多人只改了编辑器,结果 git status 里中文路径字间距崩、ls 输出错位。解决方法一样:
- 在同一个
settings.json里补上:"terminal.integrated.fontFamily": "'Fira Code', 'JetBrains Mono', 'Noto Sans CJK SC', 'monospace'" -
"terminal.integrated.fontSize": 14(建议比编辑器小 1 号,终端信息密度高) - 已打开的终端页签不会自动更新,必须关掉再按
Ctrl+Shift+`新建一个才生效
工作区设置和插件可能悄悄覆盖你的配置
即使你用户级 settings.json 写对了,也可能被以下情况覆盖:
- 项目根目录下有
.vscode/settings.json,它里面的editor.fontFamily会直接压掉用户设置 - 某些主题插件(如 One Dark Pro)或终端增强插件(如 Terminus)会注入自己的字体规则
- 远程开发(WSL / SSH)环境下,字体由远端系统提供,本地设置无效;需在远端 VS Code Server 的
settings.json中单独配
最稳的验证方式:按 Ctrl+Shift+P → 输入 Preferences: Open Settings (JSON),确认 editor.fontFamily 出现在顶层对象里,且没被任何 "[javascript]" 这类语言块嵌套包裹。











