直接设 editor.letterspacing 为 0.3~0.5 最稳,负值不超 -0.3;改后无反应多因语言专属设置、主题插件覆盖或未执行 developer: reload window 刷新渲染。

直接改 editor.letterSpacing,值设 0.3~0.5 最稳;设负值要小心,-0.3 是极限,再低容易让 ==、!= 看起来像一个符号。
为什么改了 editor.letterSpacing 没反应?
不是配置写错,而是被更高优先级的设置覆盖或渲染没刷新:
- 语言专属设置(如
"[typescript]"块)会覆盖全局值,哪怕你只在用户 settings.json 里改了 - 某些主题插件(比如 “One Dark Pro” 或 “SynthWave '84”)会在启动时硬写
editor.letterSpacing,必须在你的 settings.json 里显式重写才能压过它 - 改完不 reload 窗口,VSCode 不会重绘字符间距——按
Ctrl+Shift+P→ 输入Developer: Reload Window才生效
editor.letterSpacing 的单位和取值边界
单位是像素(px),不是 em 或 %,且支持小数。它是在每个字符右边界后“机械加空隙”,不是字体本身的 tracking:
- 设为
0:默认无额外间距(多数人实际看到的就是这个) -
0.3~0.5:等宽字体(Fira Code、JetBrains Mono)下最常用,缓解小字号粘连 -
-0.3:极少数低 DPI 屏幕上可尝试收紧,但 Consolas 下-0.4就开始重叠 - 别设
-1或2:代码对齐全乱,注释缩进错位,diff 工具显示异常
和 editor.fontLigatures、字体本身的关系
连字和字距是两套机制,互不兼容,开一个就得关另一个:
- 开了
editor.fontLigatures: true后,editor.letterSpacing对连字区域(如=>、!=)基本无效——xterm.js 渲染逻辑会跳过间距计算 - 等宽字体对
letterSpacing更敏感,微调0.1就可能让整块代码“呼吸感”突变;非等宽字体(如 Segoe UI)几乎看不出变化 - 中文标点挤在一起?这不是
letterSpacing能解决的,大概率是editor.fontFamily没配好中文字体 fallback,或系统缺失 Noto Sans CJK 类字体
工作区设置 vs 用户设置,哪个该动?
优先改用户级 settings.json,除非你明确需要团队统一或项目隔离:
- 工作区设置(
.vscode/settings.json)优先级更高,但容易误传到 Git —— 如果 PR 里 diff 显示代码行错位,八成是某人本地工作区写了"editor.letterSpacing": 0.8却没删 - 用户设置影响所有项目,适合长期习惯;工作区设置适合临时适配(比如嵌入式项目需用 12 号字,必须配合
letterSpacing: 0.2防粘连) - 别混用:如果用户级设了
0.3,工作区又设0,最终就是0——但你可能根本没意识到工作区文件里藏了一行
真正麻烦的从来不是调哪个值,而是你改完发现别人电脑上完全不一样——因为他们的主题、字体、甚至系统 DPI 缩放都不同。每次调完,最好用同一段含 ===、/** */、中文注释的代码,在不同设备上快速扫一眼是否对齐、是否粘连、是否重叠。











