# VS Code 越用越大，哪些是快取，哪些要留著

VS Code 用久了，使用者目錄裡除了擴充功能，還有快取、記錄、工作區狀態和擴充功能自己的資料。幾個目錄都變大以後，直接刪除整個 `Code` 資料夾會連設定一起重設。想減少佔用，先把可重新產生的內容和希望保留的開發環境分開。想解決卡頓則先找正在工作的擴充功能。兩個目標不要混在同一次清理裡。

## 程式、擴充功能和使用者資料不在同一個位置

一般 Windows 安裝的 VS Code，程式檔案跟安裝方式有關，擴充功能預設放在 `%USERPROFILE%\.vscode\extensions`，使用者資料通常在 `%APPDATA%\Code`。Insiders、Portable Mode、自訂 `--user-data-dir` 或 `--extensions-dir` 的設定要另行核對，不能只用一個預設路徑代表所有安裝。

| 內容 | 大致作用 | 處理時保留什麼 |
| --- | --- | --- |
| 已安裝擴充功能 | 編輯、偵錯、語言支援等功能 | 仍使用的擴充功能及其安裝來源 |
| 使用者設定、快速鍵和程式碼片段 | 自己調整的開發習慣 | 可匯出和可復原的設定 |
| 工作區與擴充功能狀態 | 專案狀態、擴充功能持久資料 | 不確定內容先保留，按擴充功能文件匯出 |
| 下載快取、程式快取和記錄 | 複用下載、執行結果和診斷記錄 | 正在使用的內容與排查需要的記錄 |

[官方擴充功能說明](https://code.visualstudio.com/docs/configure/extensions/extension-marketplace)給出預設安裝位置。[命令列說明](https://code.visualstudio.com/docs/configure/command-line)解釋了自訂目錄和設定檔的作用。專案裡的 `.vscode` 目錄又是另一回事，通常儲存專案設定，不能因為名稱相同就與使用者目錄裡的擴充功能一起處理。

## 先把目前擴充功能和設定留一份記錄

在已經確認對應安裝的終端機裡執行下面的唯讀命令，查看擴充功能及版本和處理程序資訊。輸出可以留作核對材料，但擴充功能清單沒有儲存擴充功能本體、帳戶狀態或工作資料。

```powershell
code --list-extensions --show-versions
code --status
```

VS Code 的設定檔（profile）按工作場景儲存一組設定與擴充功能選擇，不等同於單一 `settings.json`。有多套設定時，在擴充功能檢視核對目前設定檔，必要時按官方命令列說明指定。預設清單不是所有設定的完整盤點。再從 [Profiles 的匯出入口](https://code.visualstudio.com/docs/configure/profiles)儲存需要的設定、快速鍵、程式碼片段和擴充功能選擇，開啟匯出的設定核對內容。涉及專案檔案和擴充功能儲存的資料仍需各自備份。

## 排查擴充功能問題，先停用再決定解除安裝

同一個專案在啟動或編輯時卡頓，可以在擴充功能檢視裡對懷疑對象選擇「停用（工作區）」，按提示重新啟動擴充功能，再重複剛才的操作。一次停用一個擴充功能，觀察診斷資訊和回應是否一起變化。確定不用以後才從擴充功能管理功能表解除安裝。

停用保留了擴充功能檔案，所以它適合比較行為，並不會直接清理出擴充功能安裝空間。[擴充功能管理說明](https://code.visualstudio.com/docs/configure/extensions/extension-marketplace)區分了全域與工作區停用、解除安裝和重新啟用。解除安裝前也要知道相關語言偵錯或格式化功能是否還在用。

本機、WSL 和開發容器可能各自安裝擴充功能。在擴充功能檢視裡先看歸屬，不能刪了 Windows 本機的目錄，就認定遠端環境裡的那份也移除了。

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-vscode-storage-windows-zh-mobile.webp" type="image/webp" width="768" height="1180">
    <img src="/img/blog/windows-vscode-storage-windows-zh.webp" width="1360" height="454" loading="lazy" alt="VS Code 目錄的內容與歸屬不同">
  </picture>
  <figcaption>擴充功能狀態可能包含工作內容。停用用於比較行為，安裝檔案仍然保留。</figcaption>
</figure>

## 擴充功能狀態目錄裡不一定都是快取

VS Code 的 [ExtensionContext 介面](https://code.visualstudio.com/api/references/vscode-api#ExtensionContext)允許擴充功能儲存全域狀態與工作區狀態。具體資料含義由擴充功能決定，可能是索引，也可能是歷程、工作階段或其他需要保留的內容。看到 `User\globalStorage`、`User\workspaceStorage` 這類目錄變大時，先找到所屬擴充功能與文件，不要按資料夾名稱直接批次清空。

[VS Code 的完整解除安裝說明](https://code.visualstudio.com/docs/setup/uninstall)把刪除使用者資料當成重設步驟。這會改變開發環境，不能包裝成一般快取清理。想重設時先匯出、備份並確認復原方式。仍在使用其他安裝或共用目錄時也先核對歸屬。

## 清理之後又裝回來，檢查同步與設定檔

[Settings Sync](https://code.visualstudio.com/docs/configure/settings-sync)可以同步擴充功能清單、啟用狀態和設定檔的部分內容。發生合併或在另一台電腦繼續使用時，需要查看同步資料和目前設定檔，不要把重新出現的擴充功能直接歸為解除安裝失效。同步也不涵蓋所有遠端擴充功能與擴充功能私有檔案。開著同步不等於已經備份了整個開發環境。

Mole for Windows 辨識 VS Code 的 Cache、CachedData、擴充功能下載快取等具體位置。執行中的程式快取有對應保護。清理範圍不能擴大成整個使用者資料目錄。處理以前儲存並正常結束編輯器，留下排查要用的記錄，隨後重新開啟原專案，確認設定、偵錯、終端機和需要的擴充功能都正常，再完成一次原來的建置或編輯工作。

如果空間主要來自語言工具的套件快取，看[開發快取與專案相依](/tw/windows/blog/windows-developer-caches)。如果是開發容器裡的環境與磁碟區，看[Docker／WSL 的空間層次](/tw/windows/blog/docker-wsl-disk-space-windows)。


Canonical: https://mole.fit/tw/windows/blog/vscode-storage-windows
