vscode因settings.json语法错误导致配置静默失效,表现为远程连接失败、格式化不生效等;根本原因是json解析器不支持注释、单引号、末尾逗号、未转义字符等,需按标准json规范修正。

这是 JSON 格式错误,不是网络或 SSH 问题,也不是扩展没装好。 VSCode 在读取或写入 settings.json 时发现语法不合法,直接拒绝加载整个文件——你看到的“远程连接失败”“格式化不生效”“主题变回默认”,其实都是它静默失效后的连锁反应。
为什么改个配置就报 CodeExpectedError?
VSCode 的 settings.json 看似支持注释(// 或 /* */),但底层解析器实际按标准 JSON 处理。一旦出现以下情况,就会在第 1 行或某处抛出 Expected a JSON object, array or literal:
-
settings.json开头不是{,比如多了空格、BOM 字符、中文标点,或误粘贴了日志文本 - 键名用了单引号:
'editor.fontSize'→ 必须是双引号:"editor.fontSize" - 值里有未转义的换行或双引号:
"files.exclude": "**/*.log\n" → 需写成 <code>"**/*.log"或用\n转义 - 末尾多了一个逗号:
"files.autoSave": "afterDelay",(最后一项后不能有逗号) - 混用了 JSON 和 jsonc:比如在用户设置里写了
// 注释,又同时启用了严格模式插件
怎么快速定位并修复?
别猜,直接看 VSCode 自己的诊断:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Preferences: Open Settings (JSON)回车 - 观察编辑器顶部是否显示红色波浪线;把光标移到波浪线下方,看状态栏提示哪一行哪一列出错
- 打开开发者工具(
Help > Toggle Developer Tools),切换到 Console 标签页,搜Unexpected token,错误位置更精确 - 临时删掉所有内容,只留
{},保存后重启 VSCode —— 如果功能恢复,说明原文件确实损坏
settings.json 路径和作用域容易搞混
报错常发生在错误的文件上。务必确认你正在编辑的是当前生效的那一个:
- 用户级配置路径:
~/.config/Code/User/settings.json(Linux)、~/Library/Application Support/Code/User/settings.json(macOS)、%APPDATA%\Code\User\settings.json(Windows) - 工作区级配置路径:
你的项目根目录/.vscode/settings.json,只对当前文件夹生效 - 远程连接失败时,
remote.SSH.remotePlatform这类设置默认写入用户级settings.json,不是远程服务器上的文件 - 误删整个
settings.json文件比留着一个语法错误的文件更糟——VSCode 不会自动生成新文件,反而可能沿用旧缓存
真正难排查的,是那些看似合法、实则被静默忽略的配置:比如一个拼错的键名 "editor.fontSzie",或引用了已卸载扩展的设置项。它们不会报错,但也不会起作用——这种“假成功”比报错更耗时间。











