VSCode 1.85+ 已弃用 extensions.enabled 数组写法,现仅支持对象形式布尔映射;真正按工作区彻底不加载插件需用 .vscode/extensions.json 中的 unwantedDependencies 字段,ID 必须严格匹配市场 URL。

直接在 settings.json 里写 "extensions.enabled" 不起作用?
VSCode 从 1.85 开始已弃用 "extensions.enabled" 数组写法(如 "!esbenp.prettier-vscode"),现在该字段只接受对象形式的布尔映射,且仅对部分插件生效。更关键的是:它不支持条件判断,纯静态开关。如果你看到配置写了但插件照常运行,大概率是用了旧文档里的数组语法,或者误以为它能响应文件类型、路径等上下文。
unwantedDependencies 是目前唯一支持“按工作区彻底不加载”的配置
它不是禁用,而是让 VSCode 根本不去激活插件——语言服务器不启、LSP 不连、后台进程不跑。适用于 Prettier、YAML、Go 等重型插件。
- 必须写在
.vscode/extensions.json(不是settings.json)中 - 格式严格:
{"unwantedDependencies": ["publisher.name"]},ID 必须与插件市场 URL 一致(例如 esbenp.prettier-vscode) - 仅 VSCode 1.85+ 支持;旧版本会静默忽略,且不报错
- 生效需重新打开文件夹或执行
Developer: Reload Window,不能仅靠保存配置
真正“按条件”禁用,得靠插件自身配置项 + 文件关联
VSCode 没有原生的 if path.includes("test") then disable ESLint 机制。所谓“条件”,实际是组合两层控制:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 用
"files.associations"把特定后缀(如.log)绑定到plaintext语言模式,避开所有语言专属插件的激活钩子(onLanguage:javascript就不会触发) - 在语言范围配置块里关功能:
"[log]": {"prettier.enable": false, "eslint.enable": false}—— 这种写法只对支持语言级配置的插件有效(Prettier、ESLint、Python 插件都支持) - 注意顺序:
"[log]"块必须写在settings.json顶层对象内,不能嵌套在其他字段下
内置插件无法用任何配置禁用,只能“功能休眠”
像 github.vscode-pull-request-github 或 ms-vscode.notebook-renderers 这类内置插件,extensions.disabledExtensions、unwantedDependencies 全无效。它们压根不走扩展生命周期。
- 唯一办法是查其暴露的设置项,例如:
"githubPullRequests.enabled": false、"notebook.globalToolbar": false - 这些开关不会让插件进程消失,但 UI 和核心行为基本停摆
- 找不到对应设置?打开命令面板,输入
Preferences: Open Settings (JSON),再搜索插件名关键词(如github、notebook),翻看所有可编辑项
最易被忽略的一点:即使你把插件加进 unwantedDependencies,只要 settings.json 里还留着 "editor.defaultFormatter": "esbenp.prettier-vscode",VSCode 就会在保存时强行拉起它——这个行为优先级高于禁用声明。

















