vscode连字无效需三步排查:先确认字体已正确安装且fontfamily配置无误(含单引号),再验证字体本身支持目标连字,最后确保editor.fontligatures和terminal.integrated.fontligatures均启用并重载窗口。

editor.fontLigatures 设为 true 却没效果?先查字体是否真加载了
VSCode 不会渲染不存在的连字,它只是告诉字体引擎“请启用 ligature 特性”。如果字体根本没被编辑器识别,editor.fontLigatures 就是开关悬空状态。
验证方式:打开命令面板(Ctrl+Shift+P),执行 Developer: Toggle Developer Tools,在 Console 里输入:getComputedStyle(document.body).fontFamily
返回值里**必须出现你设的字体名**(如 'Fira Code'),否则说明 editor.fontFamily 配置失败或字体未系统安装。常见失败点:
- 字体名漏单引号,比如写成
Fira Code而不是'Fira Code',VSCode 解析时直接跳过 - macOS 上系统注册名是
FiraCode-Retina,但设置里写了Fira Code—— 名字差一个字符就 fallback 到 Consolas - Windows 用户只解压了 .ttf 文件,没双击安装进
C:\Windows\Fonts - Linux 用户没运行
fc-cache -fv刷新字体缓存
连字开关开了,但 != 还是分开显示?检查字体本身支持哪些符号
连字不是编辑器功能,是字体文件内置的 OpenType 特性表决定的。Fira Code 支持 =>、!=、===,但不支持 **=;JetBrains Mono 默认关闭部分连字,得用 'JetBrains Mono NL' 变体。
实操建议:
- 去对应字体 GitHub README 找 “ligatures” 表格,确认你要的符号组合是否在列(比如 Fira Code 的
!==是支持的,但??=不支持) - 别用带
NL后缀的 JetBrains Mono(那是 No Ligatures 版本),要用JetBrains Mono NL—— 这个NL是反义,表示启用更多连字 - 某些定制字体(如 Maple Mono SC NF)需显式启用 OpenType 特性:
"editor.fontLigatures": "'calt', 'ss01', 'ss04'",不能只写true
编辑器生效了,终端还是普通符号?terminal.integrated.fontLigatures 也要开
编辑器和终端是两套渲染逻辑。editor.fontLigatures 只影响代码区,不影响集成终端。想让终端也显示 => 连字,必须单独配:
"terminal.integrated.fontLigatures": true
同时确保 terminal.integrated.fontFamily 和 editor.fontFamily 一致(比如都设为 'Fira Code'),且终端字号不要设得过大(超过 16px 容易触发字体回退)。
注意:终端连字对字体要求更严格,Cascadia Code 在终端中连字稳定性优于 Fira Code,尤其在 Windows 上。
改完配置没变化?重载窗口比保存设置更重要
VSCode 对字体表的加载是进程级的,修改 editor.fontFamily 或 editor.fontLigatures 后,仅保存设置不会重新解析字体文件。必须执行:
Ctrl+Shift+P → 输入 Developer: Reload Window(或直接完全退出 VSCode 再重开)
常见忽略点:
- 以为热保存就够了,结果连字一直不出现
- 改了 settings.json 但没重启,VSCode 仍用旧字体缓存
- 用了
editor.semanticHighlighting: false关闭语义高亮来调试,却忘了它会影响 JSX 中的渲染优先级 —— 这不是连字问题,是语法层叠干扰
连字生效与否,本质是三件事串在一起:字体装对了、名字写对了、开关打开了。中间任何一环断开,都会静默失败,没有报错提示。











