根本原因是editor.fontFamily未正确配置中英fallback链,VSCode按顺序逐个匹配字体且不自动切换语言;必须显式声明西文字体前置、中文字体兜底、monospace保底,并确保字体名准确、已安装且彻底退出进程后重启。

为什么改了字体中文还是不对齐?
根本原因不是字体没装,而是 editor.fontFamily 没写对 fallback 链——VSCode 不会自动为中文切字体,它只按你写的顺序逐个查:遇到一个汉字,先看第一个字体支不支持这个 Unicode 区段;不支持,就跳下一个;直到找到能画出来的那个。如果链里只有 'Fira Code',而它不含中文,系统就会 fallback 到不可控的默认中文字体(比如 Windows 的微软雅黑),结果就是中英文宽度不匹配、光标错位、括号上下偏移。
必须显式写进配置:西文字体放最前,接 1–2 个已安装的编程向中文字体,最后加 monospace 保底。例如:
"editor.fontFamily": "'Fira Code', 'Sarasa Mono SC', 'Noto Sans CJK SC', monospace"
- 中文字体名含空格必须用英文单引号包裹,否则 VSCode 解析失败,静默退回到默认字体
-
Sarasa Mono SC和Maple Mono NF CN是专为程序员重绘的:中文全角 = 英文半角 ×2,基线对齐,标点位置与 ASCII 符号严格匹配 - 普通中文字体(如
Microsoft YaHei、Noto Sans CJK SC)在混排时容易“撑开”行距,alt+shift 多光标对齐直接失效
终端和编辑器字体要分开配,不能共用一套
很多人把 editor.fontFamily 复制到终端设置里,结果终端里中文显示方块或竖线歪斜。因为终端对等宽要求更苛刻:某些“伪等宽”中文字体(如部分 Noto Sans CJK SC 变体)在终端渲染时会导致光标错位、字符重叠,甚至锯齿加重。
终端推荐只用纯编程字体:Fira Code、Cascadia Code、JetBrains Mono,它们原生支持多语言且度量稳定。配置项是 terminal.integrated.fontFamily,别漏掉 integrated 这一级。
- 终端不支持连字渲染,即使开了
editor.fontLigatures,终端里也看不到==变成 ⟺ - macOS 用户慎用
Microsoft YaHei——它不在系统字体列表里,写了也读不到;优先选PingFang SC - Linux 用户需确认已安装
fonts-noto-cjk或sarasa-gothic包,否则 fallback 无效,中文直接变方块
字号和行高不调,再好的字体也白搭
中文字体的度量(metrics)和西文字体不同,尤其在等宽场景下。只改 editor.fontFamily 不调 editor.fontSize 和 editor.lineHeight,大概率出现字太挤、光标悬空、注释缩进塌陷。
-
editor.fontSize建议从14或15起试,比纯英文环境略大更舒服 -
editor.lineHeight必须设为具体像素值(如24或26),避免中英文混排时行高被压缩 - 修改后务必彻底退出 VSCode 进程(macOS 关闭所有窗口 + 强制退出;Windows 结束任务管理器里的全部 Code 进程),否则新字体不会生效
怎么确认字体名写对了?别靠猜
VSCode 不自带字体,它只调用操作系统已安装字体的「完整英文名」。你写的名称必须和系统字体管理器里显示的完全一致,大小写、空格、连字符一个都不能错。
- Windows:在字体设置里找「微软雅黑」,实际应写
Microsoft YaHei(不是“微软雅黑”) - macOS:打开「字体册」→选中字体→右键「显示简介」→看「全名(Full Name)」字段,比如
PingFang SC - Linux(Ubuntu):终端运行
fc-list :lang=zh | cut -d: -f2 | sort -u,输出的是可用中文字体的准确名称 - 如果只写一个字体名(如
Sarasa Mono SC)且未安装,VSCode 会静默失效,退回到默认英文字体,不会报错也不会提醒
最常被忽略的其实是「彻底退出 VSCode 进程」这一步——很多人改完 settings.json 就 Ctrl+S 然后盯着界面等变化,但字体栈只在启动时加载一次,不杀干净进程,新字体永远不会上屏。


















