中文显示为方块需手动配置font-family fallback链,如"'fira code', 'wenquanyi zen hei', monospace",确保末尾为无引号的monospace且字体名与系统注册名一致。

中文显示为方块?先改 font-family 保底链
Atom 在 Linux 或部分 macOS 环境下中文显示为小方块,不是编码问题(UTF-8 已默认启用),而是字体 fallback 链里缺中文字体。系统自带的 DejaVu Sans Mono、Consolas 等西文字体不包含汉字字形,Atom 又不会自动找系统默认中文字体补位。
必须手动在 config.cson 的 editor: 块中写死带中文字体的 fallback 链:
-
fontFamily值用单引号包裹,多个字体用逗号+空格分隔,末尾必须加'monospace' - Linux 推荐用
'WenQuanYi Zen Hei'(文泉驿正黑),macOS 可用'PingFang SC'或'Hiragino Sans GB',Windows 用'Microsoft YaHei' - 示例:
"'Fira Code', 'WenQuanYi Zen Hei', monospace"—— 注意单引号、空格、末尾无引号的monospace - 字体名必须与系统注册名完全一致:Linux 下运行
fc-list | grep -i "wenquan"确认,macOS 用「字体册」查启用状态
零宽字符(ZWSP、BOM)根本看不到?Atom 不支持
show_invisibles: true 只渲染 ASCII 级不可见字符: (空格)、\t(制表符)、\n(换行符),对 Unicode 控制字符如 \u200B(零宽空格)、\uFEFF(BOM)、\u00A0(NBSP)完全不识别,也不会画点或箭头。
这类字符肉眼不可见,却会导致 JS 报错、CSS 选择器失效、Git 提交差异异常。Atom 无法原生暴露它们,得靠外部手段:
- 用 VSCode 打开同一文件,它内置的
Gremlins能高亮所有 Unicode 控制符 - 终端执行
xxd file.js | grep -C1 '200b\|feff'直接二进制扫描 - 在 Atom 中装插件
whitespace(自带),它虽不显示,但保存时会 trim 行尾空格,并在状态栏提示“x whitespace characters removed”,间接预警 - 提交前跑
git diff --ignore-space-at-eol,若仍有差异,大概率是零宽字符在作祟
特殊符号(如 →、¶)显示异常?检查 editor 渲染层是否被插件覆盖
开启 show_invisibles: true 后,空格应显示为浅灰圆点(·)、制表符为 →、换行符为 ¶。如果这些符号变成方块、问号或干脆不出现,不是配置错了,而是某个插件劫持了 editor 的渲染逻辑。
常见干扰源:
-
markdown-preview-plus:预览模式下会禁用 editor 的 invisibles 渲染,切回编辑视图才生效 -
language-javascript-jsx或旧版语法包:可能覆盖source.js.jsxscope 的 tokenization,导致 invisibles 无处挂钩 -
file-iconsv2.1.45 以上版本:其 CSS 注入机制与新版 Atom 冲突,偶尔会污染atom-text-editor::shadow样式 - 临时验证方法:禁用所有插件 → 重启 Atom → 开启
show_invisibles→ 看是否正常;再逐个启用定位问题插件
字体连字(ligatures)不生效?三个条件缺一不可
哪怕装了 Fira Code 并在 config.cson 设了 fontFamily,==、=> 还是分开显示,说明连字没真正启用。这不是 Atom 设置问题,而是渲染链断在了某一层。
必须同时满足:
- 所选字体本身支持 OpenType
liga特性(Fira Code、JetBrains Mono、Cascadia Code可以,DejaVu Sans Mono不行) - 在
styles.less中显式声明:atom-text-editor { font-feature-settings: "liga" 1, "calt" 1; }(不能写在config.cson里) - 没被其他插件样式覆盖:打开 DevTools(
Ctrl+Shift+I),检查atom-text-editor元素 computed styles,确认font-feature-settings值存在且未被!important覆盖 - 别加
text-rendering: optimizeLegibility—— 它在高分屏上会导致滚动卡顿,只留font-feature-settings更稳
连字是字体、渲染引擎、CSS 声明三者协作的结果,任何一环松动,→ 就只是两个字符,不是单个符号。











