VSCode崩溃后未保存代码缓存在workspaceStorage(状态)和History(快照)目录,路径依系统而异;History中JSON文件的content字段含base64编码原文,可解码恢复。

崩溃后本地缓存在哪找?先定位 workspaceStorage 和 History 目录
VSCode 崩溃后未保存的代码,不会凭空消失,而是分散在两个核心缓存区:一个是工作区状态缓存 workspaceStorage,另一个是文件内容快照缓存 History。两者路径因系统而异,但结构一致:
- Windows:
%APPDATA%\Code\User\workspaceStorage(状态)和%APPDATA%\Code\User\History(快照) - macOS:
~/Library/Application Support/Code/User/workspaceStorage和~/Library/Application Support/Code/User/History - Linux:
~/.config/Code/User/workspaceStorage和~/.config/Code/User/History - 远程开发(SSH/WSL):快照实际存在服务端,路径为
~/.vscode-server/data/User/History,本地设置无效
注意:workspaceStorage 下的子目录名是哈希值,需逐个打开查看 state.vscdb(SQLite 数据库)或 backups 子目录;而 History 是纯文件夹,里面按路径层级组织了带时间戳的 JSON 或二进制快照,可直接用文本编辑器打开预览内容。
File: Open Local History 不显示条目?检查这三件事
按下 Ctrl+Shift+P 输入 File: Open Local History 却一片空白,不是功能坏了,而是快照根本没生成。必须确认以下三点:
- 文件不是
Untitled-1这类无路径临时文件——Local History只记录有真实磁盘路径的文件 -
files.autoSave没被设为off;若为afterDelay或onFocusChange,且你崩溃前至少触发过一次自动保存(默认 1 秒延迟),快照才存在 - 该文件路径没被
files.watcherExclude错误排除(例如写了**或node_modules/**泛匹配,导致 VSCode 根本不监听)
如果以上任一条件不满足,Open Local History 就不会列出任何条目——这不是恢复失败,而是“从未开始备份”。
从 History 文件夹手动提取快照的实操步骤
当命令面板失效、或你想绕过 UI 直接捞数据时,可手动进入 History 目录提取:
- 进入对应路径,例如
~/.config/Code/User/History/path/to/project/src/index.ts - 文件名格式通常是
index.ts_1717034567890.json(末尾数字为毫秒时间戳) - 用 VSCode 或任意编辑器打开该 JSON,查找
"content"字段,其值就是当时保存的原始文本(已 base64 编码) - 复制该字段值,在在线工具(如 base64decode.org)解码,或用 Node.js 一行解码:
Buffer.from('base64字符串', 'base64').toString() - 注意:SSD 空间紧张时,VSCode 会主动清理
.history里的旧文件;若磁盘使用率超 90%,可能已不可逆丢失
restore 失败或内容错乱?关键限制必须知道
点 Restore 后没反应、恢复出空文件、或只有一半内容,往往不是操作错误,而是受硬性机制约束:
-
files.localHistory.maxFileEntries默认为 50:一个文件近期改太勤,旧快照会被轮转淘汰 - 清空文件后又手输过新内容(哪怕一个字母),再点
Restore时,VSCode 会把“当前编辑器内容”当作基准做 diff,导致还原逻辑错位 - 最危险的操作:全选 + Delete 后顺手按了
Ctrl+S——空文件立刻成为新的“已保存版本”,所有历史快照降级为只读存档,无法一键覆盖 - 远程开发场景下,
History在服务端,但你本地执行Restore命令时,VSCode 仍会尝试从本地路径拉取,结果自然为空
真正容易被忽略的,是那个“清空后顺手保存”的瞬间——它不报错、不警告,却让所有补救手段瞬间失效。恢复的前提,永远是你没主动把坏状态固化下来。


















