多根工作區 (Multi-root Workspaces)

您可以透過 Visual Studio Code 的多根工作區功能,同時處理多個專案資料夾。當您同時處理幾個相關的專案時,這非常有幫助。例如,您可能有一個包含產品文件的儲存庫,並希望在更新產品原始碼時同時保持文件為最新狀態。

multi-root hero

注意:如果您想深入了解 VS Code 的「工作區」概念,可以參閱 什麼是 VS Code「工作區」?。除非您明確建立多根工作區,否則「工作區」僅代表您專案的單一根資料夾。

新增資料夾

您可以輕鬆地將其他資料夾新增至現有的工作區。有幾種新增資料夾的操作方式:

將資料夾新增至工作區

檔案 > 將資料夾新增至工作區 (Add Folder to Workspace) 指令會開啟一個「開啟資料夾」對話方塊,讓您選擇新的資料夾。

Add Root Folder

一旦新增了根資料夾,檔案總管將會顯示該新資料夾作為檔案總管中的一個根目錄。您可以右鍵點擊任何根資料夾,並使用內容選單來新增或移除資料夾。

Remove Root Folder

檔案總管應能像以前一樣運作。您可以在根資料夾之間移動檔案,並使用內容選單和檔案總管檢視中提供的任何常見檔案操作功能。

若已進行設定,則每個根資料夾都支援如 files.exclude 在 VS Code 中開啟 在 VS Code Insiders 中開啟 這類的設定;若設為全域使用者設定,則適用於所有資料夾。

拖放操作

您可以使用拖放操作將資料夾新增至工作區。將資料夾拖曳至檔案總管即可將其新增至目前的工作區。您甚至可以選取並拖曳多個資料夾。

注意:將單一資料夾拖放至 VS Code 的編輯器區域仍會以單一資料夾模式開啟該資料夾。如果您將多個資料夾拖放至編輯器區域,則會建立一個新的多根工作區。

您也可以使用拖放操作來重新排序工作區中的資料夾。

原生檔案開啟對話方塊的多重選取

使用您平台原生檔案開啟對話方塊來開啟多個資料夾時,將會建立一個多根工作區。

命令列 --add

將一個或多個資料夾新增至最後一個作用中的 VS Code 執行個體,以進行多根工作區操作。

  code --add vscode vscode-docs

移除資料夾

您可以使用內容選單中的 從工作區移除資料夾 (Remove Folder from Workspace) 指令來從工作區移除資料夾。

工作區檔案

當您新增多個資料夾時,它們最初會放置在標題為 未命名的工作區 (UNTITLED WORKSPACE) 的工作區中,該名稱會一直保留直到您儲存工作區為止。除非您希望將工作區儲存在永久位置(例如您的桌面),否則不需要儲存它。只要使用它們的 VS Code 執行個體保持開啟,未命名的工作區就會存在。一旦您完全關閉了帶有未命名工作區的執行個體,如果您打算將來再次開啟它,系統將會提示您儲存它。

save workspace dialog

當您儲存工作區時,它會建立一個 .code-workspace 檔案,且檔案名稱將會顯示在檔案總管中。

工作區另存為...

如果您想將工作區檔案移動到新的位置,可以使用 檔案 > 工作區另存為... 指令,這會自動設定相對於新工作區檔案位置的正確資料夾路徑。

開啟工作區檔案

若要重新開啟工作區,您可以:

  • 在您平台的檔案總管中按兩下 .code-workspace 檔案。
  • 使用 檔案 > 開啟工作區 指令並選取該工作區檔案。
  • 檔案 > 開啟最近使用的檔案 (⌃R (Windows, Linux Ctrl+R)) 清單中選取該工作區。
    • 工作區具有 (工作區) 字尾,以區別於一般的資料夾。

open recent workspace list

就像在 VS Code 中開啟單一資料夾時會有 關閉資料夾 一樣,這裡有一個 關閉工作區 (⌘K F (Windows, Linux Ctrl+K F)) 指令可用於關閉作用中的工作區。

工作區檔案結構 (Schema)

.code-workspace 的結構相當直觀。您擁有一個包含絕對路徑或相對路徑的資料夾陣列。當您想要共用工作區檔案時,使用相對路徑會更好。

您可以使用 name 屬性來覆寫資料夾的顯示名稱,為檔案總管中的資料夾提供更有意義的名稱。例如,您可以將專案資料夾命名為「Product」和「Documentation」,以便透過資料夾名稱輕鬆辨識內容。

{
  "folders": [
    {
      // Source code
      "name": "Product",
      "path": "vscode"
    },
    {
      // Docs and release notes
      "name": "Documentation",
      "path": "vscode-docs"
    },
    {
      // Yeoman extension generator
      "name": "Extension generator",
      "path": "vscode-generator-code"
    }
  ]
}

這將產生以下檔案總管顯示結果:

named folders

正如您從上面的範例中所見,您可以在工作區檔案中新增註解。

工作區檔案也可以在 settings 下包含工作區 全域設定,並在 extensions 下包含 延伸模組建議,我們將在下方討論。

workspace file schema

一般 UI

編輯器

當您使用多根工作區時,VS Code 的使用者介面僅有一些細微的變化,主要目的是釐清不同資料夾之間的檔案歧義。例如,如果多個資料夾中的檔案名稱衝突,VS Code 會在索引標籤標題中包含資料夾名稱。

tabbed headers

如果您希望始終在索引標籤標題中顯示資料夾,可以使用 workbench.editor.labelFormat 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定,並將其值設為 "medium" 或 "long" 以顯示資料夾或完整路徑。

"workbench.editor.labelFormat": "medium"

VS Code 使用者介面(例如 開啟的編輯器快速開啟 (⌘P (Windows, Linux Ctrl+P)) 清單)會包含資料夾名稱。

quick pick has folder name

如果您正在使用 檔案圖示佈景主題 且該主動式主題支援此功能,您將會看到一個特殊的工作區圖示。

在下方您可以看到內建 Minimal (Visual Studio Code) 檔案圖示佈景主題中的工作區圖示。

custom workspace icon

像全域搜尋這類的 VS Code 功能適用於所有資料夾,並會按資料夾對搜尋結果進行分組。

multi-root search results

當開啟多根工作區時,您可以透過在 包含的檔案 (files to include) 方塊中使用 ./ 語法,選擇在單一根資料夾中進行搜尋。例如,如果您輸入 ./project1/**/*.txt,它將會搜尋 project1/ 根資料夾下的所有 .txt 檔案。

設定

在一個工作區擁有多個根資料夾的情況下,每個根資料夾中都可能存在一個 .vscode 資料夾,用於定義該資料夾適用的設定。為了避免設定衝突,使用多根工作區時僅套用資源(檔案、資料夾)設定。影響整個編輯器的設定(例如 UI 配置)將會被忽略。例如,兩個專案不能同時設定縮放比例 (zoom level)。

與單一資料夾專案一樣,系統支援使用者設定;您也可以設定全域工作區設定,這些設定將套用於多根工作區中的所有資料夾。全域工作區設定將儲存在您的 .code-workspace 檔案中。

{
  "folders": [
    {
      "path": "vscode"
    },
    {
      "path": "vscode-docs"
    },
    {
      "path": "vscode-generator-code"
    }
  ],
  "settings": {
    "window.zoomLevel": 1,
    "files.autoSave": "afterDelay"
  }
}

當您從單一資料夾執行個體轉移到多資料夾時,VS Code 會將來自第一個資料夾且適用的編輯器全域設定,加入到新的全域工作區設定中。

您可以透過設定編輯器輕鬆檢視和修改不同的設定檔案。設定編輯器的索引標籤讓您可以選擇「使用者」設定、「全域工作區」設定以及個別「資料夾」設定。

settings dropdown

您也可以透過指令開啟特定的設定檔案:

  • 喜好設定:開啟使用者設定 - 開啟您的全域使用者設定。
  • 喜好設定:開啟工作區設定 - 開啟您工作區檔案的設定區段。
  • 喜好設定:開啟資料夾設定 - 開啟作用中資料夾的設定。

全域工作區設定會覆寫使用者設定,而資料夾設定可以覆寫工作區或使用者設定。

不支援的資料夾設定

不支援的編輯器全域資料夾設定會在您的資料夾設定中以灰色顯示,並從 預設資料夾設定 清單中過濾掉。您還會在該設定前面看到一個資訊圖示。

unsupported setting information

偵錯

透過多根工作區,VS Code 會在所有資料夾中搜尋 launch.json 除錯設定檔,並以資料夾名稱作為字尾顯示它們。此外,VS Code 還會顯示工作區設定檔中定義的啟動設定。

debugging dropdown

上面的範例顯示了 TSLint 延伸模組 的除錯設定。有一個來自 tslint 延伸模組資料夾的 launch 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定,用於啟動在 VS Code 延伸模組主機 (Extension Host) 中執行的延伸模組,以及來自 tslint-server 資料夾的 attach 設定,用於將除錯器附加到正在執行的 TSLint 伺服器。

您也可以在 vscode-tslint 工作區中看到針對 tslinttslint-servertslint-tests 資料夾的三個 新增設定 指令。新增設定 指令將開啟資料夾的 .vscode 子資料夾中現有的 launch.json 檔案,或建立一個新檔案並顯示除錯設定範本下拉式選單。

debugging template dropdown

設定中使用的變數(例如 ${workspaceFolder} 或現已棄用的 ${workspaceRoot})會相對於它們所屬的資料夾進行解析。您可以透過在變數後附加根資料夾名稱(以冒號分隔)來對每個工作區資料夾設定變數範圍。

工作區啟動設定

工作區範圍的啟動設定位於工作區設定檔的 "launch" 區段中(透過指令選擇區中的 工作區:開啟工作區設定檔)。

Workspace Settings

或者,可以透過啟動設定下拉式選單中的「新增設定 (工作區)」項目來新增啟動設定。

Add Config

複合式 (compound) 啟動設定可以按名稱參照個別的啟動設定,只要這些名稱在工作區內是唯一的,例如:

  "compounds": [{
      "name": "Launch Server & Client",
      "configurations": [
        "Launch Server",
        "Launch Client"
      ]
  }]

如果個別的啟動設定名稱不唯一,則可以使用更詳細的 "folder" 語法來指定符合資格的資料夾。

  "compounds": [{
      "name": "Launch Server & Client",
      "configurations": [
        "Launch Server",
        {
          "folder": "Web Client",
          "name": "Launch Client"
        },
        {
          "folder": "Desktop Client",
          "name": "Launch Client"
        }
      ]
  }]

除了 compounds 之外,工作區設定檔的 launch 在 VS Code 中開啟 在 VS Code Insiders 中開啟 區段也可以包含一般的啟動設定。請確保所有使用的變數都明確地限定在特定資料夾中,否則它們對工作區而言無效。您可以在 變數參考 中找到關於明確限定範圍變數的更多詳細資訊。

以下是一個啟動設定範例,其中程式位於 "Program" 資料夾,而在進行逐步除錯時應跳過 "Library" 資料夾中的所有檔案:

"launch": {
  "configurations": [{
      "type": "node",
      "request": "launch",
      "name": "Launch test",
      "program": "${workspaceFolder:Program}/test.js",
      "skipFiles": [
        "${workspaceFolder:Library}/out/**/*.js"
      ]
  }]
}

工作 (Tasks)

與 VS Code 搜尋除錯設定的方式類似,VS Code 也會嘗試自動偵測工作區中所有資料夾內 gulp、grunt、npm 和 TypeScript 專案檔案中的工作,並搜尋 tasks.json 檔案中定義的工作。工作的位置由資料夾名稱字尾表示。請注意,tasks.json 中定義的工作版本必須為 2.0.0。

tasks dropdown

從上述的 TSLint 延伸模組 工作區範例中,您可以看到來自 tslinttslint-tests 資料夾中 tasks.json 檔案的兩個 已設定工作,以及許多自動偵測到的 npm 和 TypeScript 編譯器 已偵測工作

工作區工作設定

工作區範圍的工作位於工作區設定檔的 "tasks" 區段中(透過指令選擇區中的 工作區:開啟工作區設定檔)。只有 "shell""process" 類型的工作可以在工作區設定檔中定義。

原始碼控制

透過多根工作區,有一個 原始碼控制提供者 (SOURCE CONTROL PROVIDERS) 區段,當您有多個作用中的儲存庫時,它會為您提供概覽。這些可以由多個 SCM 提供者提供;例如,您可以將 Git 儲存庫與 Azure DevOps Server 工作區並排顯示。當您在此檢視中選取儲存庫時,可以在下方看到原始碼控制的詳細資訊。

multiple scm providers

您可以使用 Ctrl+ClickShift+Click 來選取多個儲存庫。它們的詳細資訊將顯示在下方的不同區域中。

延伸模組

如果您是一位延伸模組開發者,可以參閱我們的 採用多根工作區 API 指南,了解 VS Code 多根工作區 API,以及如何讓您的延伸模組在多個資料夾中良好運作。

下方列出了一些已採用多根工作區 API 的熱門延伸模組。

注意:如果某個延伸模組尚未支援多個資料夾,它仍然會在您多根工作區的第一個資料夾中運作。

延伸模組建議

VS Code 透過資料夾 .vscode 子資料夾下的 extensions.json 檔案支援資料夾層級的延伸模組建議。您也可以透過將延伸模組新增至 .code-workspace 檔案來提供全域工作區延伸模組建議。您可以使用 延伸模組:設定建議的延伸模組 (工作區資料夾) 指令來開啟您的工作區檔案,並將延伸模組識別碼 ({publisherName}.{extensionName}) 新增至 extensions.recommendations 陣列中。

{
  "folders": [
    {
      "path": "vscode"
    },
    {
      "path": "vscode-docs"
    }
  ],
  "extensions": {
    "recommendations": ["eg2.tslint", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
  }
}

後續步驟

常見問題

我該如何回到單一專案資料夾的工作模式?

您可以關閉工作區並直接開啟資料夾,或是從工作區中移除該資料夾。

作為延伸模組開發者,我需要做什麼?

請參閱我們的 採用多根工作區 API 指南。大多數延伸模組都可以輕鬆支援多根工作區。

© . This site is unofficial and not affiliated with Microsoft.