必须同时启用editor.renderwhitespace:"all"和editor.rendercontrolcharacters:true,否则→、¶、·等符号无法完整显示;而\u200b、\ufeff等unicode控制符需正则搜索或gremlins等插件识别。

VSCode 默认不显示隐藏符号,但缩进错乱、粘贴后行为异常、JSON 解析失败等问题,八成是这些字符在捣鬼。必须让它们“显形”,才能准确定位。
怎么让 →、¶、· 这些符号立刻出现
这不是一个开关能搞定的事——editor.renderWhitespace 和 editor.renderControlCharacters 必须同时启用,否则你看到的永远是“部分真相”。
-
editor.renderWhitespace控制空格(·)、制表符(→)、换行符(¶)等“空白类”符号的渲染逻辑,设为"all"才会全部画出来 -
editor.renderControlCharacters是底层开关,决定是否把 CRLF、LF、TAB、BOM 等真正当成控制字符来渲染;设为true才能让¶和→实际显示出来 - 只开前者不开后者:编辑器知道该画什么,但底层拒绝渲染 → 你看到的仍是纯文本
- 只开后者不开前者:控制字符语义被识别,但没指定怎么画 → 依然不显示任何符号
为什么复制粘贴后代码突然“不对劲”,但 → 和 ¶ 都不显示
因为 \u200B(零宽空格)、\uFEFF(BOM)、\u200C(零宽非连接符)这类 Unicode 控制符,完全不在 renderWhitespace 和 renderControlCharacters 的管辖范围内。
- 它们不会触发缩进高亮,也不会变成
·或→,但会影响字符串比较、正则匹配、甚至 Git diff - 用正则搜索
[\u200B-\u200D\uFEFF\u00AD](VSCode 搜索框勾上.*)能快速揪出它们 - 装插件
Unicode Highlighter或Gremlins更省事:Gremlins可配置"gremlins.chars": ["ZWSP", "BOM"],只标你关心的字符,不干扰视线 - 别依赖“看起来正常”——遇到诡异行为,先查字节:用
hexdump -C file.js | head看开头有没有ef bb bf(BOM)
工作区设置会悄悄覆盖你的用户级配置
改完全局设置发现某个项目里还是不显示控制符号?大概率是项目根目录下的 .vscode/settings.json 里写了冲突项。
- 工作区设置优先级 > 用户设置,哪怕你全局开了
renderControlCharacters,只要工作区里写了"editor.renderControlCharacters": false,它就失效 - 检查右下角状态栏:如果显示
Spaces: 2,说明当前文件强制转空格,按 Tab 插入的是·而不是→,自然看不到箭头 - 临时验证:按
Ctrl+Shift+P→ 输入Change Indentation→ 选Convert Indentation to Tabs,再按一次 Tab,看是否出现→ - 别在
settings.json里写"editor.renderWhitespace": true—— 它只接受"none"/"boundary"/"all",写布尔值会静默失败
真正难搞的不是怎么开显示,而是哪些字符根本不会被任何原生设置捕获。BOM、ZWSP、RLO 这些东西,连 renderControlCharacters: true 都管不到,得靠插件或手动 hex 查。调试格式问题时,别停在“符号出来了”,要确认“所有可疑字符都落网了”。











