VSCode工作区状态由.code-workspace文件和插件workspaceState机制持久化,非本地缓存;.code-workspace保存布局、路径等,workspaceState数据存于插件对应storage.json中,二者独立且不因清缓存失效。

VSCode 本地缓存不直接“保存工作区状态”,真正持久化工作区状态的是 .code-workspace 文件和插件的 workspaceState 存储机制——两者用途不同、路径不同、生命周期也不同。
为什么改了设置或关了窗口,下次打开还是原来的样子?
这不是“缓存”在起作用,而是 VSCode 在后台做了两件事:
- 自动将当前编辑器组、打开的标签页、活动终端(若启用持久化)等 UI 状态写入本地临时存储(路径类似
~/Library/Application Support/Code/Backups或%APPDATA%\Code\Backups),仅用于崩溃恢复,不跨会话保留; - 如果你显式执行了
文件 → 将工作区另存为…,它会生成一个.code-workspace文件,里面硬编码了所有文件夹路径、窗口布局、调试配置等——这才是你下次双击就能复原的“状态”来源。
没保存这个文件?那关掉窗口后,所有多根结构、分屏、调试 launch 配置全部丢失,VSCode 不会从任何“缓存”里捞回来。
workspaceState 和 globalState 到底存在哪儿?
插件开发者调用的 context.workspaceState.update(),数据最终落盘到一个加密 JSON 文件中:~/.vscode/extensions/your-ext-id/storage.json(macOS/Linux)或 %USERPROFILE%\.vscode\extensions\your-ext-id\storage.json(Windows)。
关键点:
- 每个插件 ID 对应一个独立
storage.json,不会混; - 其中的 key 是插件 ID + 工作区路径哈希值拼接而成,所以换项目后自然隔离;
- 它不是“缓存”,而是持久化存储——只要插件没被卸载,这个文件就一直存在;
- 如果插件激活后没
await context.workspaceState.update('key', value),Promise 被丢弃,写入失败且无报错。
手动删缓存不会清掉工作区状态,但可能让 VSCode “忘记”你刚保存的 .code-workspace
运行 Developer: Reload Window 或清空 Backups 目录,只影响崩溃恢复能力,对以下内容完全无感:
- 已保存的
.code-workspace文件(它就在你指定位置,纯文本,删了才真丢); - 插件的
workspaceState(它存在 extensions 目录下,跟 Backups 无关); - 工作区 settings(存在
.code-workspace文件里或项目内.vscode/settings.json中)。
真正要清理某个工作区的插件状态,得在插件代码里调 context.workspaceState.update('key', undefined),或者手动编辑对应 storage.json 删除那段哈希键——但后者极易出错,不推荐。
最容易被忽略的一点:VSCode 从不校验 .code-workspace 里写的路径是否存在。路径错了,它就静默跳过那个文件夹,连个警告都不给。你看到“文件夹不可用”,往往不是缓存问题,而是路径迁移后没更新 JSON 内容。


















