VSCode安全模式启动命令是code --disable-extensions,需确保参数为复数形式、置于命令末尾且不与--extensions-dir混用,同时先执行code --kill终止后台进程以避免参数失效。

用 code 命令启动 VSCode 并禁用所有扩展
直接在终端运行 code --disable-extensions 即可启动一个不加载任何已安装扩展的 VSCode 实例。这个参数会绕过用户和工作区级别的扩展启用状态,适合排查扩展冲突或验证原生编辑器行为。
常见错误现象:有人误用 --disable-extension(少了个 s),导致命令报错 Unknown argument;也有人把路径参数放错位置,比如写成 code --disable-extensions . 但中间漏了空格,被 shell 当作一个命令名解析失败。
- 必须使用复数形式:
--disable-extensions,不是单数 - 路径参数(如
.或具体文件)要放在参数之后,例如:code --disable-extensions ./src - 该参数不影响已打开的窗口,只作用于本次新启动的实例
临时禁用特定扩展而不是全部
如果只想停用某个可疑扩展(比如 esbenp.prettier-vscode),可以用 --disable-extension(注意这里是单数)加扩展 ID。ID 可在扩展详情页 URL 或 package.json 中找到,格式通常是 publisher.name。
使用场景:调试格式化异常、语法高亮失效、保存时卡顿等问题时,比全量禁用更精准。
- 多个扩展需重复使用该参数,例如:
code --disable-extension esbenp.prettier-vscode --disable-extension rust-lang.rust - 扩展 ID 区分大小写,
ms-python.python不能写成MS-Python.Python - 禁用后,该扩展仍显示在扩展面板中,但状态为 “Disabled for this session”
为什么 --disable-extensions 有时不生效
最常见原因是 VSCode 已在后台运行。Electron 应用默认复用已有窗口进程,命令行参数仅影响新窗口创建逻辑,而不会修改已有渲染进程的行为。
性能与兼容性影响:禁用扩展后首次启动略快(跳过扩展激活流程),但某些核心功能(如 TypeScript 语言服务)其实由内置扩展提供,它们不受此参数影响——也就是说,JS/TS 的基础智能提示依然存在。
- 先执行
code --kill终止所有后台进程,再运行code --disable-extensions - macOS 上若通过 Dock 启动过 VSCode,也可能残留 helper 进程,需检查 Activity Monitor 中是否有
Code Helper - Windows 用户要注意,任务栏右键菜单里的“新建窗口”仍会加载扩展,必须走命令行
想每次启动都默认禁用扩展?别改默认行为
VSCode 没有全局配置项让 code 命令默认带上 --disable-extensions。强行 alias 成 alias code='code --disable-extensions' 会破坏日常开发流——你很快会发现连 GitLens、ESLint 都没了,反而更难定位问题。
真正需要的是可切换的快捷方式:
- 保留原
code命令用于日常开发 - 单独建个脚本,比如
code-noext,内容为#!/bin/sh; code --disable-extensions "$@" - 或者在 shell 配置里加函数:
code-noext() { code --disable-extensions "$@"; }
扩展机制本身是 VSCode 的核心设计,彻底绕过它就像不用插件开浏览器——能跑,但不是常态。真要长期隔离环境,不如用 --user-data-dir 配合干净配置目录更可控。


















