必须使用 extensions.disabled 字段写入 .vscode/settings.json,因 extensions.enabled 带 ! 前缀已过时且不稳定,extensions.experimental.ignoredExtensions 已弃用;该字段是当前唯一官方支持、文档与源码双重确认的工作区禁用方式。

直接结论:必须用 extensions.disabled 字段写入 .vscode/settings.json,其他字段(如 extensions.enabled 带 ! 前缀)已过时或不可靠。
为什么 extensions.enabled 数组加 ! 前缀不推荐
早期文档曾提过在 "extensions.enabled" 数组里用 "!esbenp.prettier-vscode" 表示禁用,但该语法未被 VSCode 官方正式支持,且自 1.80 版本起实际行为不稳定——部分扩展仍会加载、激活事件照常触发、甚至引发 Extension host terminated unexpectedly 错误。VSCode 当前稳定且唯一明确支持的禁用方式是 extensions.disabled 字符串数组。
-
extensions.enabled仅用于全局启用控制(已废弃为布尔值),不再接受带!的混合列表 -
extensions.experimental.ignoredExtensions是旧版临时字段,2025 年后已被标记为 deprecated,VSCode 启动时可能警告“Unknown configuration setting” -
extensions.disabled是当前唯一被文档和源码双重确认的、作用于工作区的禁用配置项
正确配置 extensions.disabled 的实操要点
在项目根目录下确保存在 .vscode/settings.json,内容格式必须严格为 JSON,键名大小写敏感,扩展 ID 必须完整准确(区分大小写、含 publisher 名)。
- 扩展 ID 可在扩展面板中点击该扩展 → 查看右上角 “Publisher.ID” 格式,例如 Prettier 是
esbenp.prettier-vscode,不是prettier或prettier-vscode - 禁用多个扩展时,数组元素之间用英文逗号分隔,末尾不能有逗号(JSON 语法错误会导致整个 settings.json 失效)
- 如果项目使用多根工作区(workspace file),需将
extensions.disabled放在.code-workspace文件的settings字段下,而非单个文件夹的.vscode/settings.json
{
"extensions.disabled": [
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"ms-python.python"
]
}
命令面板操作 vs 手动编辑,哪个更可靠?
命令面板执行 Extensions: Disable Extension in Workspace 确实会自动写入 extensions.disabled,但存在两个隐蔽风险:
- 若当前工作区已存在
settings.json且格式非法(如多了注释、尾逗号),VSCode 可能静默忽略写入,不报错也不生效 - 某些扩展(尤其是语言服务器类)被禁用后,VSCode 不会立即卸载其进程;需完全关闭窗口再重开,否则
Developer: Toggle Developer Tools中仍可见残留的 extensionHost 日志 - 命令面板操作无法批量禁用,每次只能选一个;而手动编辑可一次定义全部,适合团队统一配置
容易被忽略的兼容性细节
禁用状态只对新打开的文件/编辑器实例生效,已打开的 TypeScript/Python 文件不会自动失去语法支持——因为相关语言服务可能已在后台激活。真正生效需满足两个条件:
- VSCode 完全重启(不只是关 tab)
- 打开的文件类型与被禁用扩展的
activationEvents匹配度下降(例如禁用 Python 扩展后,再打开.py文件不会触发其onLanguage:python激活) - 如果扩展本身声明了
"*"作为 activationEvent(极少数插件),它仍可能在启动时加载,此时extensions.disabled仅阻止其功能注册,不终止进程
最稳妥的验证方式:打开命令面板 → 输入 Developer: Show Running Extensions,检查目标扩展是否显示为 “disabled (workspace)” 状态,且进程数为 0。


















