extensions.json生效需同时满足三个条件:文件位于项目根目录.vscode/extensions.json路径、json格式合法且仅含recommendations字段、settings中extensions.ignorerecommendations为false;仅首次打开工作区时在扩展视图底部显示「workspace recommendations」。

如何让 extensions.json 真正生效
它不会自动装插件,也不会弹窗提醒你“该装啥”,只会在首次打开工作区时,在扩展视图底部显示「Workspace Recommendations」——前提是三个条件同时满足:extensions.json 文件存在、JSON 格式合法、且用户没关掉推荐功能。
-
extensions.json必须放在项目根目录下的.vscode/子目录里,路径错一丁点(比如丢掉.vscode/或放成./extensions.json)就完全不触发 - 内容必须是标准 JSON,顶层只能有
recommendations字段,不能有多余逗号、注释或其它字段,例如:{"recommendations": ["ms-python.python", "esbenp.prettier-vscode"]} - 检查设置里
extensions.ignoreRecommendations是否为false(默认是true,但有人手动关过);extensions.showRecommendations也得开着,否则连提示区域都不显示
多个格式化插件共存时怎么不出乱子
VSCode 不会帮你协调执行顺序,保存文件时若同时注册了 prettier-vscode 和 editorconfig,或者 ESLint 自带的格式化器也开着,结果就是代码来回跳、缩进变来变去、甚至报错说“格式化程序未找到”。
- 右键编辑器空白处 → “格式化文档”,看弹出菜单里列了几个提供者——出现多个就说明已冲突
- 别靠卸载解决,优先在
settings.json里用editor.defaultFormatter显式指定主力,例如:"editor.defaultFormatter": "esbenp.prettier-vscode"
- 某些插件(如
ms-python.python)内置 Linter 和 Formatter,启用外部pylint或black前,务必先关掉 Python 扩展里的对应子功能,否则诊断信息重叠、错误行标错位
多根工作区里插件推荐和配置怎么不互相干扰
一个 .code-workspace 文件里加了 backend 和 frontend 两个文件夹,你只想在 backend 里推荐 Docker 插件、frontend 里推 ESLint,但默认情况下所有推荐都堆在同一个区域,而且 settings.json 的优先级容易被覆盖。
-
.code-workspace文件本身支持extensions字段,但仅限于全局开关(如"extensions.ignoreRecommendations": true),无法按文件夹粒度控制推荐列表 - 真正可行的做法:每个子文件夹各自维护独立的
.vscode/extensions.json,VSCode 会分别识别它们;但注意——只有当该文件夹被单独打开时才会触发提示,合并在工作区里时,只认最外层工作区的.vscode/extensions.json - 配置优先级链条是:工作区级
settings.json> 文件夹级settings.json> 用户级设置。想让某个插件只在特定文件夹生效,得在对应文件夹的.vscode/settings.json里写"extensions.enabledExtensions"列表,而不是靠禁用
插件更新后行为异常,怎么快速回退
VSCode UI 里没有“降级”按钮,新版插件(比如 Python 扩展 v2024.x)一旦移除旧调试协议或改了 API,你就只能手动换回旧版——而这个过程卡在第三步的人最多。
- 先停用当前插件:扩展视图里右键 → “禁用”
- 去插件页面点击右上角“…” → “Install Another Version”,选旧版下载(不是所有插件都开放历史版本)
- 下载的是
.vsix文件,必须用命令行安装:code --install-extension path/to/old-version.vsix
;直接双击安装可能失败,因为 VSCode 会校验签名或版本兼容性 - 装完别忘了重启窗口;如果还出问题,检查
~/.vscode/extensions/下有没有残留的同名旧版本文件夹,手动删掉再试
.vscode/settings.json 里写了 editor.defaultFormatter 就万事大吉,结果发现它被工作区 .code-workspace 里的同名设置覆盖了,而你根本没注意到那个文件里悄悄写了 "settings": {"editor.defaultFormatter": null}。











