需通过临时修改font_face为不存在字重(如"Microsoft YaHei ExtraBold")观察是否回退至Consolas等默认字体来判断当前生效的是哪套同名字体,若回退则原配置命中了某套“Microsoft YaHei”,否则大概率fallback到备用字体。

字体列表里出现重复中文名怎么判断是哪套在生效
Sublime Text 不会告诉你当前用的是哪个字体文件,只显示 font_face 配置值(比如 "Microsoft YaHei"),但系统里可能同时装了“微软雅黑”“微软雅黑 Bold”“微软雅黑 UI”甚至第三方同名字体。Windows 下尤其常见——字体册里名字一样、版本不同、路径不同,Sublime 会按系统字体链顺序取第一个匹配项。
验证方法很简单:临时改配置,加个不存在的字重试试:
"font_face": "Microsoft YaHei ExtraBold"
如果界面直接崩成等宽字体(比如 Consolas),说明原配置确实命中了某个“Microsoft YaHei”,但你不确定是哪个;如果没变化,大概率是 fallback 到了备用字体。
- 打开 Windows 字体设置(
控制面板 → 外观和个性化 → 字体),按名称排序,删掉所有带“Duplicate”“Copy”“(old)”字样的同名字体 - 重点检查是否混入了从 macOS 或 Linux 拷来的 .ttc/.otf 文件,这类字体 Windows 渲染器常解析异常,哪怕名字一样也容易触发字符重叠
- Sublime 启动时不会 reload 字体缓存,删完字体必须重启编辑器才生效
为什么改了 font_face 还是显示方块或重叠字
不是字体没生效,而是字体本身不支持你要显示的 Unicode 区段。比如 "SimSun" 能正常显示 GBK 常用汉字,但遇到 U+3400–U+4DBF 的扩展 A 区汉字(如“?”),就会 fallback 到默认等宽字体,造成视觉上“字挤在一起”或“下半截被切掉”。
查具体字符缺失最准的方式是复制乱码位置的字符,粘贴进浏览器地址栏,看 URL 编码(如 %E7%94%98 对应“甘”,%F9%9C%9C 就是超范围编码)。再用 charmap.exe(Windows 自带字符映射表)搜这个 Unicode 码点,看当前选中字体是否包含它。
- 优先用
"Microsoft YaHei"或"Noto Sans CJK SC",它们覆盖 Unicode Basic Multilingual Plane 全部中文区 - 避免用
"Courier New"或"Consolas"当主字体——它们中文 glyph 极少,fallback 频繁 - 配置里别写
"font_face": "SimSun, Microsoft YaHei"这种逗号分隔列表:Sublime 会逐个尝试,一旦 SimSun 能渲染当前字符就停,不会继续往后找;而 SimSun 对很多新汉字根本无定义
font_options 里的 directwrite 开关到底要不要开
开 "directwrite" 是 Windows 下解决中文渲染毛刺、字距错位的必要条件,但它对某些老旧或非标准字体(尤其是从旧版 Office 拷出来的 .ttf)反而会放大重叠问题——DirectWrite 引擎更严格地执行 OpenType 字距规则,而这些字体的 kern 表有缺陷。
判断方式:临时注释掉 "font_options": ["directwrite"],重启 Sublime,对比同一段含标点的中文(比如“测试,你好。”)。如果关闭后标点和文字间距变均匀、逗号不再“粘”在字上,说明该字体不兼容 DirectWrite。
- 稳妥做法是保留
directwrite,但换用现代字体(如Noto Sans CJK、HarmonyOS Sans) - 若必须用老字体,可单独为它关掉:
"font_options": [],靠 GDI 渲染兜底 - macOS/Linux 用户不用管这个字段,Sublime 在这些系统上默认走 Core Text / FreeType,行为稳定
保存配置后中文还是糊成一片怎么办
别急着改字体,先确认是不是编码层已经出问题——字体再好,解码错了也是白搭。右下角状态栏显示的编码(如 UTF-8)只是 Sublime 当前解码方式,不等于文件真实编码。一个用 GBK 存的文件,被 UTF-8 解出来,每个汉字变成两三个乱码字符,再好的字体也救不回来。
验证步骤只有两步:
- 用 Notepad++ 打开同一文件,右下角看它报什么编码(不是 Sublime 的)
- 在 Sublime 里点
File → Reopen with Encoding,挨个试Chinese (GBK)、UTF-8、UTF-8 with BOM,看到中文立刻停
真正麻烦的是混合编码文件:前几行 UTF-8,中间插了一段 GBK 编码的注释。这种没法靠字体解决,得用 ConvertToUTF8 插件或手动切分重存。


















