
全局设置必须写进用户级 settings.json,其他地方改了都不算数。 工作区级(即项目根目录下的 .vscode/settings.json)只影响当前文件夹,哪怕你把它当成“全局”去改,VSCode 也完全无视。
怎么确认打开的是用户级 settings.json
按 Cmd + ,(macOS)或 Ctrl + ,(Windows/Linux)→ 点右上角那个花括号 {} 图标 → 看窗口左下角状态栏:显示“用户”才是对的。如果显示“工作区”或“文件夹”,说明你正编辑的是项目配置,不是全局。
- 首次打开是空的
{}?直接往里加键值对就行,比如"editor.fontSize": 14 - 别手动拼路径找
settings.json,不同系统位置差异大(macOS 在~/Library/Application Support/Code/User/,Windows 在%APPDATA%\Code\User\),容易错 - 点开后发现内容很多但没注释?那是之前有人写过,不是默认值;VSCode 不会把默认设置自动写进这个文件
editor.detectIndentation 为什么建议设为 false
它默认开启,会在你打开每个文件时“猜”缩进规则(比如看前几行是 2 空格还是 4 空格),然后强行重设整个文件的缩进——结果就是光标乱跳、保存后格式全崩、和 Prettier 冲突。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 关掉后,缩进行为完全由
editor.tabSize和editor.insertSpaces控制,稳定可预期 - 团队协作中尤其要关:不同人提交的文件缩进不一致很常见,靠“猜”只会放大问题
- 配合语言块使用更安全,例如:
"[typescript]": { "editor.tabSize": 2 },不会被detectIndentation覆盖
语言专属配置写在哪、怎么生效
像 "[javascript]"、"[jsonc]" 这种方括号块,必须放在用户级 settings.json 的顶层对象里,不能嵌套在别的字段下。
- 它只是“默认值”,一旦项目里有工作区级同名配置(比如
.vscode/settings.json里也写了"[javascript]"),就会被覆盖 - 常见误写:
"editor.languageSettings": { "[javascript]": { ... } }—— VSCode 完全不认这个键,直接忽略 - JSON 语法必须严格:结尾不能多逗号,字符串必须用双引号,
true/false不能加引号
真正难的不是写多少配置,而是分清哪些该放用户级、哪些必须放工作区级——比如 python.defaultInterpreterPath 或 emeraldwalk.runonsave 这类路径/命令强依赖项目结构的项,硬塞进用户级反而会导致报错或静默失效。

















