当前项目处于安全模式的明确标志是vscode右下角显示“restricted mode”,此时非内置扩展、终端、调试器和任务运行器均被禁用,且ctrl+click跳转失效;点击该标签并选择“trust folder and enable extensions”可解除限制。

如何判断当前项目是否处于安全模式
VSCode 1.79+ 默认启用「工作区信任」机制,打开一个文件夹时若未明确授权,编辑器会进入安全模式:禁用所有非内置扩展、禁用终端自动启动、禁用调试器、禁用任务运行器。最直观的提示是右下角状态栏出现 Restricted Mode 标签,鼠标悬停显示“某些功能已被禁用,因为此文件夹未被信任”。此时你无法运行 npm run dev、无法触发 eslint 插件校验、甚至 Ctrl+Click 跳转定义也会失效。
手动开启文件夹信任(一次性授权)
点击右下角 Restricted Mode → 选择 Trust Folder and Enable Extensions 即可解除限制。该操作本质是向当前工作区根目录写入一个隐藏配置文件:.vscode/settings.json 中新增 "security.workspace.trust.untrustedFiles": "open"(仅当用户显式选择“信任”时才写入),同时 VSCode 会在用户数据目录中记录该路径的信任状态(Windows 在 %APPDATA%\Code\User\workspaceStorage\ 下按哈希路径存信任元数据)。
注意以下几点:
- 信任操作不可跨机器同步——
.vscode/settings.json不包含信任状态本身,它只影响后续行为;实际信任记录存在本地 VSCode 用户数据中 - 如果项目含
.vscode/settings.json且已存在"extensions.ignoreRecommendations": true等字段,信任后仍需手动启用所需扩展(如Prettier、ESLint) - 对符号链接目录(如
ln -s ~/projects/myapp ./myapp)执行信任,VSCode 记录的是解析后的绝对路径,而非链接路径
批量关闭信任检查(不推荐,仅限开发环境)
全局禁用工作区信任会削弱安全边界,仅建议在完全可控的离线开发机或 CI 本地调试场景使用。方法是修改用户设置:settings.json 中添加:
{
"security.workspace.trust.enabled": false
}
重启 VSCode 后,所有文件夹默认视为受信任,Restricted Mode 永远不会出现。但副作用明显:
- 任意打开的 GitHub Codespaces 链接、陌生人发来的 ZIP 解压项目,都会无条件启用全部扩展——包括可能读取文件、执行命令的恶意插件
-
terminal.integrated.env.*等环境变量配置将对所有工作区生效,丧失按项目隔离能力 - 部分企业策略插件(如强制代码扫描的
sonarlint)依赖信任状态决定是否激活,关闭后可能跳过关键检查
通过命令行绕过信任提示(自动化脚本场景)
CI 构建或本地一键启动脚本中,需避免交互式弹窗。可用 code CLI 的 --skip-add-to-recently-opened 参数配合环境变量临时绕过:
code --disable-extensions --no-sandbox --skip-add-to-recently-opened ./my-project
但这只是“跳过 UI 提示”,不代表信任——扩展仍被禁用,终端仍被锁定。真正可行的自动化信任方式是预置信任状态,需提前运行:
echo '{"trustedFolders":["/absolute/path/to/my-project"]}' > "$HOME/Library/Application Support/Code/User/workspaceTrust.json"
(macOS 路径;Windows 对应 %APPDATA%\Code\User\workspaceTrust.json;Linux 为 $HOME/.config/Code/User/workspaceTrust.json)
注意:workspaceTrust.json 是 VSCode 内部格式,结构变更频繁,VSCode 1.85+ 已开始弃用该文件,改用 SQLite 数据库存储,因此硬编码写入极易失效。生产环境脚本应优先走人工首次信任 + 镜像固化方式。
信任不是开关,而是路径指纹与扩展行为的绑定关系。一旦误删用户数据目录中的 workspaceStorage,或重装 VSCode,所有信任记录清零——这点常被忽略,导致反复弹出 Restricted Mode。











