在 Mac 上清理 VS Code 缓存,保留设置和扩展
VS Code 占空间或反复出问题,不一定要把整套配置重置,Mac 上的 Code 文件夹把可重建的缓存、设置、工作区状态和扩展数据放在一起,整目录删掉比清缓存影响大得多。先重新加载窗口或排查扩展,再处理已经确认的缓存。
先分清 Code 文件夹里的内容
Microsoft 标准发行版把用户数据放在 ~/Library/Application Support/Code,默认配置的设置和状态在 User 下,安装好的扩展通常另放在 ~/.vscode/extensions,自定义启动参数可以改变这些位置。微软的设置文档写明了设置文件的位置,环境实现则把工作区存储、日志和下载的扩展安装包分开。
下表第一列除了最后一行,都是 ~/Library/Application Support/Code 下面的相对路径。
| 位置 | 存的是什么 | 怎么处理 |
|---|---|---|
Cache、Code Cache、GPUCache |
Chromium 的资源、编译代码和图形缓存 | 可以重建,退出后再清 |
CachedData |
按构建版本分开的 VS Code 启动代码缓存 | 可以重建,下次启动可能变慢 |
CachedExtensionVSIXs |
下载的扩展安装包 | 可以移除,以后安装或更新可能重新下载 |
User/workspaceStorage |
各工作区的编辑器和扩展状态 | 默认保留,逐项查看 |
User/globalStorage |
持久化的编辑器和扩展数据,可能有登录相关状态 | 保留,不是通用缓存 |
logs |
过去会话的诊断记录 | 问题排查完后再删旧会话 |
User |
设置、快捷键、代码片段、配置文件及其他状态 | 保留,本地历史记录也在其中 |
~/.vscode/extensions |
安装好的扩展 | 保留,通过编辑器管理 |
Electron 的用户数据存储说明写明,Chromium 的缓存会和 Cookie、本地存储放在同一区域,旁边的文件夹长得像缓存,不代表也能删。这些都是实现上的细节,不是每个版本都会把表里的文件夹建齐。
先用 VS Code 自己的排障入口
保存文件,按 Shift + Command + P 打开命令面板,运行 Developer: Reload Window,它只是重新加载窗口,文档没说它会清磁盘缓存,界面没刷新这类问题先用它更合适。它的实现调用的就是窗口重新加载操作。
如果问题从某次扩展变动后开始,先禁用那个扩展,不要直接删它的数据。微软的性能排障文档里有 Help: Start Extension Bisect,它会一组一组地禁用扩展,每次问你问题还在不在,定位到是哪个扩展后,按那个扩展自己的文档去重置或重建,没有哪个清缓存操作能把所有扩展各自写的数据都安全重置掉。
先量大小,再移动文件夹
在访达按 Shift + Command + G,输入 ~/Library/Application Support/Code,逐个看文件夹大小,不要把父目录总量都算成可清理空间,也可以在终端用下面两条只读命令查看。
du -sh "$HOME/Library/Application Support/Code"/*
du -sh "$HOME/Library/Application Support/Code/User"/* "$HOME/.vscode/extensions"
第一行把顶层缓存和 User 分开,第二行可以看工作区存储或全局存储是不是占了大头,父目录和子目录的数字不要相加。提示路径不存在,就是这里没有那个文件夹,提示权限错误则说明这次没统计全。
这些路径对应标准稳定版,如果用 --user-data-dir 或 --extensions-dir 启动,就去看参数指定的位置,微软的命令行参考记录了这两个参数。远程开发环境要单独查,它的数据不一定在本机这个文件夹里。
只清已经确认可重建的部分
- 保存工作,结束集成终端里的任务,用 Command + Q 彻底退出 VS Code,关掉一个窗口不等于退出应用。
- 任何涉及状态的尝试之前,先备份
User,扩展无法重建的内容另外留一份,项目文件夹和项目自己的.vscode配置继续保留。 - 在访达打开
Code,只把已经确认的Cache、Code Cache、GPUCache或CachedData移到废纸篓,先处理相关的一个再测试,不要把旁边的文件夹一起删掉。 - 如果空间花在下载上,单独查看
CachedExtensionVSIXs,里面是安装包,不是安装好的扩展,如果里面有再也下载不到的离线安装包,先另存一份。扩展下载器会复用已有安装包,缺少时再下载。 - 排障用不上了,可以删掉
logs下的旧会话,以后的会话会写新日志,但删掉的旧日志是找不回来的。
重新打开同一个项目,看原来的问题解决没有,再考虑清空废纸篓,用到的资源会重新生成缓存,第一次启动也可能慢一点,这是在正常重建,不代表清理失败了。
工作区存储要当成状态来处理
User/workspaceStorage 下按工作区 ID 分文件夹,微软的工作区存储实现会写入 state.vscdb 和 workspace.json,扩展也可以在这里保存工作区专用文件,一个很大的条目可能放着有用的本地状态,包括扩展里的对话,不一定只是索引。
读取某个条目的 workspace.json,确认它对应哪个文件夹或工作区,项目删除或移动后条目可能还在,但找不到文件夹也可能只是外置磁盘没挂载。确认是哪种情况,备份该条目,退出 VS Code,再考虑只移走这一个,项目文件虽然在别处,丢掉的工作区或扩展状态不会因为重新打开项目就回来,远程的和认不出来的条目都先留着。
User/globalStorage 不动,重置它可能删掉扩展的持久数据、让你重新登录,具体影响取决于扩展和 VS Code 版本,只备份 settings.json 是保不住这些状态的。
核对空间,再排查剩下的问题
重新打开并使用项目后,用同一组命令再量一次,废纸篓里的文件仍占磁盘空间,所以 Code 变小不代表可用空间立刻增加,确认设置、扩展和原来的问题之前,先保留恢复的余地。
问题仍在的话,可以指定两个全新、未使用过的目录启动隔离实例。
code --user-data-dir "$HOME/vscode-cache-test-data" --extensions-dir "$HOME/vscode-cache-test-extensions"
这会创建测试数据,不重置平时的配置,找不到 code 时按命令行参考链接的 macOS 安装步骤设置。第一次对比前不要启用 Settings Sync,也不要装扩展,干净实例里一切正常,只能说明问题可能出在平时的配置或扩展上,不能就此认定是缓存坏了。如果清理后登录没了,先别再删,看看移走过哪些状态文件夹,需要恢复时,先退出 VS Code 再从备份放回去。
Mole 在其中的位置
Mole Mac 的清理会列出 CachedData、Code Cache、GPUCache 和已有的 WebStorage/<id>/CacheStorage 叶目录,可清理时默认勾选,Application Support 下的条目需要完全磁盘访问权限,VS Code 运行时相关行暂不可清理。对应本地文件夹已不存在的 User/workspaceStorage 条目只列出来供你检查,默认不勾选,点永不清理此类会排除这条 VS Code 规则,以后再出现的同类条目也不再列出。这些行不包括设置、全局存储和在用的扩展,缓存删除方式默认是永久删除,工作区条目也一样,不会自动进废纸篓,想留个恢复的余地,就在缓存删除方式里选放入废纸篓。VS Code 已测应用指南另讲卸载清单。
如果要移除编辑器,见在 Mac 上卸载 VS Code,包管理器和项目构建缓存则放在开发缓存指南里。
常见问题
会删掉我的设置或扩展吗?
按上面的步骤只清缓存,User 和 ~/.vscode/extensions 都还在,删掉整个 Code 文件夹则是把用户数据重置了,是两回事,微软的卸载文档有说明。
为什么缓存又长回来了?
使用时 VS Code 会重建代码和图形缓存,以后安装或更新扩展时也可能重新下载缺失的安装包,反复删除解决不了某个扩展持续生成过多数据的问题。
能把工作区存储全删掉吗?
这样会丢掉所有工作区的本地状态,还是逐个看、留好备份,启动时重新建出了文件夹,不代表原来的内容回来了。