直接禁用插件必须重载窗口才生效,因vscode仅标记状态而不卸载运行实例;工作区禁用写入.vscode/settings.json但插件仍在内存中响应事件,需执行developer: reload window才能真正停用。

直接禁用插件(非卸载)必须重载窗口才生效
VSCode 的工作区级禁用不是“点完就停”,而是把插件状态写入当前工作区的 .vscode/settings.json,但运行时仍保留在内存里。不执行重载,插件继续响应文件保存、格式化、语言服务等事件。
常见错误现象:右键插件选了 Disable (Workspace),结果 Prettier 还在格式化、ESLint 还在报错——大概率是忘了 Ctrl+Shift+P → 输入 Developer: Reload Window 并回车。
- 重载后,插件图标旁会出现灰色 “Workspace” 标识
- 打开命令面板,输入
Extensions: Show Disabled Extensions,确认插件状态显示为disabled in workspace - 若仍触发行为,说明有其他配置在“兜底”,比如
editor.defaultFormatter指向已禁用插件的 ID
禁用后还在运行?检查 settings.json 里的强制配置项
插件被禁用 ≠ 功能完全消失。VSCode 会尝试加载插件来满足你明写的设置,哪怕它已被禁用。
典型例子:"editor.formatOnSave": true + "editor.defaultFormatter": "esbenp.prettier-vscode" → 即使 esbenp.prettier-vscode 已加入 extensions.disabled,VSCode 仍会拉起它执行格式化。
- 检查
.vscode/settings.json中是否含有该插件相关的启用项,例如:prettier.enable、eslint.enable、gitlens.codeLens.enabled - 删掉或设为
false这类开关,比单纯禁用插件更彻底 - 对 Prettier/ESLint 类插件,建议优先改用插件自身提供的布尔开关(如
"prettier.enable": false),而非依赖extensions.disabled
想彻底不加载?用 unwantedDependencies(VSCode 1.85+)
unwantedDependencies 不是禁用,是“不让插件启动”。它比 extensions.disabled 更底层,适用于不想让语言服务器、LSP 或后台进程跑起来的场景。
在工作区根目录新建或编辑 .vscode/extensions.json,写入:
{ "unwantedDependencies": ["esbenp.prettier-vscode", "redhat.vscode-yaml"] }
- 仅 VSCode 1.85 及以上版本支持,旧版本会忽略该字段
- 插件必须已安装,否则无效;ID 必须准确(可在插件市场 URL 中提取,如
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode→ ID 是esbenp.prettier-vscode) - 生效需重新打开文件夹或重载窗口,且不会出现在“已禁用扩展”列表中——因为它根本没被激活过
内置插件无法禁用,只能关功能开关
像 github.vscode-pull-request-github、ms-vscode.notebook-renderers 这类内置插件,不响应任何禁用指令,extensions.disabled 和 unwantedDependencies 对它们完全无效。
唯一有效路径是找它暴露的设置项,手动关闭对应功能:
-
"githubPullRequests.enabled": false关闭 PR 面板 -
"notebook.globalToolbar": false隐藏 notebook 工具栏 -
"files.associations": { "*.md": "markdown" }可绕过 notebook 对 .md 文件的强制接管
这类设置必须写进工作区 settings.json,否则全局开关会影响其他项目。找不到开关项?查插件文档或在设置搜索框里输入插件名关键词,看是否有布尔型配置。











