vs code 更新后残留的旧版本文件夹是完整安装包副本,需手动清理;仅当 code --status 显示 updatestate 为 idle 时,才可安全删除除最新版外的哈希命名文件夹,避免误删待激活版本或中断插件连接。

VS Code 更新后残留的旧版本文件夹不是缓存,而是完整安装包副本,必须手动清理;只保留正在运行和最新一次成功更新的版本,其余可安全删除,但前提是 code --status 显示 updateState 为 idle。
为什么不能靠“自动清理”或卸载重装?
VS Code 没有内置的旧版本清理机制——update.mode 设置只控制是否自动下载/安装,完全不涉及磁盘空间管理。卸载程序也不会动 %APPDATA%\Code\updates(Windows)或 ~/.vscode/updates(macOS/Linux),这些哈希命名的文件夹会一直堆积,每个常达 300–800 MB。
- 误删正在“待激活”的新版本会导致下次启动失败(它在重启后才正式切换)
- 直接删整个
updates目录,可能让 VS Code 启动时找不到可用版本而报错 - 某些插件(如 Remote - WSL)依赖当前运行版本路径,删错会中断连接
如何确认哪些旧版本能删?
关键不是看文件夹名,而是看 VS Code 当前状态和修改时间:
- 先执行
code --status,确保输出中updateState字段为idle(不是checking、downloading或updating) - 打开任务管理器(Windows)或活动监视器(macOS),确认没有残留的
Code.exe或Code Helper进程 - 进更新目录:
%USERPROFILE%\AppData\Roaming\Code\updates(Windows)或~/.vscode/updates(macOS/Linux) - 按“修改日期”排序,最新一个通常是刚完成更新的版本;再往前的,只要不是当前运行中的版本(可通过
code --version对比路径判断),就可删
Windows PowerShell 一键清理命令(安全版)
这条命令跳过时间戳格式的临时目录(如 20261015T143022Z),只处理哈希命名的旧安装包,并保留最新一个:
Get-ChildItem "$env:USERPROFILE\AppData\Roaming\Code\updates\*" -Directory | Where-Object {$_.Name -notmatch '^\d{8}T\d{6}Z$'} | Sort-Object LastWriteTime -Descending | Select-Object -Skip 1 | ForEach-Object { Remove-Item $_.FullName -Recurse -Force }
注意:Select-Object -Skip 1 保证至少留一个,避免清空后无可用版本;执行前建议先用 Get-ChildItem ... | Sort-Object LastWriteTime -Descending | Select-Object Name,LastWriteTime 预览顺序。
macOS/Linux 终端快速清理
原理相同:按修改时间倒序列出所有子目录,跳过第一个(最新),其余全删:
ls -dt ~/.vscode/updates/*/ | tail -n +2 | xargs -r rm -rf
如果提示 “No match”,说明 ~/.vscode/updates 下没有符合规则的目录;若存在 ~/Library/Application Support/Code/updates(老版本路径),也需一并检查。删完不要立刻重启 VS Code——先等几秒,确保系统释放句柄,再打开。
真正容易被忽略的是:清理后首次启动变慢是正常的,但如果你发现 updates 目录又迅速膨胀,大概率是启用了 update.mode 为 default 且网络环境不稳定,导致更新反复中断、留下多个半成品包。这时候要先关掉自动更新,手动触发一次干净更新,再清理。











