在 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,它會分組停用擴充功能,再問你問題是否還在,定位到一個擴充功能後,按它自己的文件執行重設或重建,沒有一個清快取操作能安全重設所有擴充功能自行寫入的資料。
先量大小,再移動資料夾
在 Finder 按 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設定繼續保留。 - 在 Finder 開啟
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 會重建程式碼和圖形快取,以後安裝或更新擴充功能時也可能重新下載缺少的安裝套件,反覆刪除解決不了某個擴充功能持續產生過多資料的問題。
能把工作區儲存全刪掉嗎?
這樣會丟掉所有已存工作區的本機狀態,逐項查看並保留備份,啟動時重新建立了資料夾,不代表原來的內容復原了。