--disable-extensions是唯一能100%禁用所有插件的命令行参数,它跳过整个扩展加载流程,不读取任何配置文件,适用于排查启动异常、崩溃或性能问题;必须置于命令末尾,不可与--extensions-dir混用。

VSCode 没有“一键禁用所有插件”的图形按钮,但有真正可靠的命令行开关:--disable-extensions。它不依赖设置、不读取 .vscode/extensions.json 或 settings.json,直接跳过整个插件加载流程——这才是排查插件冲突或启动异常时最干净的起点。
用 --disable-extensions 启动 VSCode 纯净模式
这是唯一能 100% 隔离插件影响的方式,尤其适合诊断以下问题:
- VSCode 启动卡死、白屏、高 CPU 占用
- 打开特定文件后崩溃(如
.log、.yaml) - 格式化/补全/语法检查突然失效,且无法定位是哪个插件导致
操作方式(全部平台通用):
- 终端中执行:
code --disable-extensions /path/to/your/project - Windows 用户可右键开始菜单 VSCode 图标 → “更多” → “以管理员身份运行”,再拖入项目文件夹到窗口(需提前在设置中启用“将 VSCode 添加到 PATH”)
- macOS:终端输入
open -n -b "com.microsoft.VSCode" --args --disable-extensions /path/to/project - Linux:确保
code命令可用,否则用完整路径如/usr/bin/code --disable-extensions
⚠️ 注意:--disable-extensions 必须放在命令末尾;若同时用了 --extensions-dir,该参数会被忽略。
extensions.disabledExtensions 不是“一键禁用”,而是配置式禁用
这个配置项写在 settings.json 里,看起来像批量开关,但实际行为有限制:
- 只对已安装插件生效;未安装的插件不会被“禁用”,也不会触发推荐抑制
- 禁用后部分插件仍会初始化(比如监听
onStartupFinished的),只是后续功能不可用 - 某些插件(如
ms-python.python)禁用后需手动执行Developer: Reload Window才真正卸载语言服务器 - 数组里填错 ID(比如写成
prettier而非esbenp.prettier-vscode)会导致静默失败,无报错提示
正确写法示例(工作区级):
{
"extensions.disabledExtensions": [
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"redhat.vscode-yaml"
]
}
插件 ID 必须精确匹配市场页 URL 最后一段,或在扩展详情页点击“Copy Extension ID”获取。
为什么不用 extensions.enabled 对象配置?
VSCode 官方文档未公开支持 "extensions.enabled": { "publisher.name": false } 这种写法。虽然部分版本能解析,但它属于未声明的内部字段,行为不稳定:
- VSCode 1.87+ 已明确忽略该字段,配置后无效果
- 即使生效,也无法覆盖
onLanguage类自动激活逻辑(比如打开.py文件仍可能触发 Python 插件初始化) - 与
extensions.disabledExtensions混用时优先级不明确,容易互相覆盖
所以别碰这个字段。要禁用,就老实用 extensions.disabledExtensions 数组;要启用特定插件,靠 extensions.ignoreRecommendations + 手动安装更可控。
禁用后还要注意三处残留
插件禁用 ≠ 行为清零。以下内容不会随禁用自动清除,必须手动检查:
-
settings.json中插件专属配置项(如"prettier.requireConfig"、"codegeex.enableCompletion"),它们可能干扰其他插件或造成日志污染 -
keybindings.json里绑定的快捷键(如extension.prettier.format),禁用后按快捷键会弹出“命令未找到”提示 -
.vscode/extensions.json中的recommendations,下次打开该工作区仍会弹窗提醒安装
排查故障时,如果 --disable-extensions 下问题消失,下一步不是逐个启用插件,而是先删掉这三项残留再重试——很多“疑似插件 bug”其实来自旧配置残留。











