多根工作区

你可以在Visual Studio Code中作多个项目文件夹,支持多根工作区。当你同时处理多个相关项目时,这会很有帮助。例如,你可能有一个包含产品文档的仓库,想在更新产品源代码时保持最新。

多根英雄

注意:如果你想了解更多关于VS Code“工作区”概念的信息,可以查阅《什么是VS Code“工作区”?除非你明确创建多根工作区,否则“工作区”就是你项目的单个根文件夹。

添加文件夹

在现有工作区中添加另一个文件夹很容易。添加文件夹有几种手势:

将文件夹添加到工作区

文件>“添加到工作区”命令会弹出“打开文件夹”对话框来选择新文件夹。

添加根文件夹

添加根文件夹后,资源管理器会在文件资源管理器中显示该新文件夹为根目录。你可以右键点击任何根目录,并使用上下文菜单添加或移除文件夹。

移除根文件夹

文件资源管理器应该能正常工作,表现正常。你可以在根文件夹之间移动文件,并使用上下文菜单和资源管理器视图中提供的典型文件作作。

场景包括

files.exclude
  • 在VS代码中打开
  • 在VS Code Insiders中开放
如果配置了,支持每个根文件夹;如果配置为全局用户设置,则支持所有文件夹。

拖放

你可以用拖放功能把文件夹添加到工作区。把一个文件夹拖到文件资源管理器里,把它添加到当前工作区。你甚至可以选择并拖拽多个文件夹。

注意:将单个文件夹放入 VS Code 的编辑器区域,仍会以单一文件夹模式打开该文件夹。如果你将多个文件夹拖拽到编辑器区域,就会创建一个新的多根工作区。

你也可以用拖放方式在工作区里重新排序文件夹。

多选本地文件开启对话框

用你平台的原生文件打开对话框打开多个文件夹,会创建一个多根工作区。

命令行 --add

在最后一个活跃的 VS Code 实例中添加一个或多个文件夹,以实现多根工作区。

  code --add vscode vscode-docs

删除文件夹

您可以使用“从工作区移除文件夹”的上下文菜单命令从工作区中移除一个文件夹。

工作空间文件

当你添加多个文件夹时,它们最初会被放置在一个名为“无标题工作区”的工作区中,这个名称会一直保留,直到你保存工作区。你不需要保存工作区,除非你想把它放在一个永久位置,比如在你的桌面上。只要它们使用的VS Code实例是开放的,无标题工作区就会存在。一旦你完全关闭了一个带有无标题工作区的实例,如果你计划将来再次打开它,系统会要求你保存它:

保存工作区对话框

当你保存工作区时,它会创建一个.code-workspace文件和文件名会显示在文件资源管理器中。

将工作区保存为......

如果你想把工作区文件移到新位置,可以用另存工作区”命令>文件,它会自动设置相对于新工作区文件位置的正确文件夹路径。

打开工作区文件

要重新打开工作区,你可以:

  • 双击.code-workspace在你平台的资源管理器中文件。
  • 使用“文件>打开工作区”命令,选择工作区文件。
  • 文件中选择工作区>打开最近(⌃R(Windows,Linux Ctrl+R)列表。
    • 工作区带有(工作区)后缀以区别于文件夹。

打开最近工作区列表

就像在 VS Code 中打开单个文件夹时关闭文件夹一样,关闭工作区Windows,Linux Ctrl+K F)命令是关闭当前工作区的。

工作区文件结构

的模式.code-workspace相当直接。你有一个文件夹数组,路径是绝对路径或相对路径。当你想共享工作空间文件时,相对路径更合适。

你可以用以下方式覆盖文件夹的显示名称名称属性,以便在资源管理器中为文件夹赋予更有意义的名称。例如,你可以给项目文件夹命名,比如“产品”和“文档”,以便通过文件夹名称轻松识别内容:

{
  "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"
    }
  ]
}

这将生成以下资源管理器显示:

命名文件夹

正如上面示例所示,你可以在工作区文件中添加注释。

工作区文件也可以包含以下工作区的全局设置背景设定以及延伸建议扩展,我们将在下文讨论。

工作区文件结构

通用用户界面

编辑

使用多根工作区时,VS Code 界面只有少数改动,主要是为了区分文件夹间的文件歧义。例如,如果多个文件夹中文件名称冲突,VS Code 会在标签页头中包含文件夹名称。

标签页头

如果你希望标签页头里始终显示文件夹,可以使用

workbench.editor.label格式
  • 在VS代码中打开
  • 在VS Code Insiders中开放
背景设定用“中等”或“长”的数值来显示文件夹或完整路径。

"workbench.editor.labelFormat": "medium"

VS Code UI如OPEN EDITORS快速打开⌘P(Windows,Linux Ctrl+P)列表中包含文件夹名称。

快速选择有文件夹名称

如果你使用文件图标主题且激活主题支持该主题,你会看到一个特殊的工作区图标。

下面你可以看到内置最小简(Visual Studio Code)文件图标主题中的工作区图标:

自定义工作区图标

VS Code 的功能如全局搜索可以跨所有文件夹,并将搜索结果按文件夹分组。

多根搜索结果

当你打开多根工作区时,可以通过以下方式选择在单个根文件夹中搜索./包含文件中的语法。例如,如果你输入./project1/**/*.txt,将搜索所有.txt文件归属项目1/根文件夹。

背景设定

在一个工作区中存在多个根文件夹时,可以有.vscode每个根目录里的文件夹里,定义该文件夹应适用的设置。为了避免设置碰撞,使用多根工作区时只应用资源(文件、文件夹)设置。影响整个编辑器的设置(比如UI布局)会被忽略。例如,两个项目不能同时设置缩放级别。

用户设置支持,就像单文件夹项目一样,你还可以设置全局工作区设置,这些设置会应用到多根工作区的所有文件夹。全局工作区设置将存储在您的.code-workspace档案。

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

当你从单个文件夹实例切换到多个文件夹时,VS Code 会将第一个文件夹的相关编辑器范围设置添加到新的全局工作区设置中。

你可以通过设置编辑器轻松查看和修改不同的设置文件。设置编辑器标签页允许你选择用户设置、全局工作区设置和单个文件夹设置。

设置下拉菜单

你也可以用以下命令打开特定的设置文件:

  • 偏好设置:打开用户设置 - 打开你的全局用户设置
  • 偏好设置:打开工作区设置 - 打开工作区文件中的设置部分。
  • 偏好设置:打开文件夹设置——打开当前文件夹的设置。

全局工作区设置覆盖用户设置,文件夹设置可以覆盖工作区或用户设置。

不支持的文件夹设置

不支持的编辑器全域文件夹设置将在你的文件夹设置中显示为灰色,并从默认文件夹设置列表中被过滤掉。你还会在设置前看到一个信息图标。

不支持的设定信息

调试

在多根工作区中,VS Code 会在所有文件夹中搜索launch.json调试配置文件,并以文件夹名称作为后缀显示。此外,VS Code 还会显示工作区配置文件中定义的启动配置。

调试下拉菜单

上例展示了TSLint扩展的调试配置。有一个

发射
  • 在VS代码中打开
  • 在VS Code Insiders中开放
配置来自滴滴扩展文件夹,启动该扩展在VS Code扩展主机中运行,同时还有一个附着配置来自tslint-server将调试器附加到运行中的TSLint服务器。

你还可以看到文件夹的三个添加配置命令,滴滴,tslint-server, 和TSLINT测试, 在 vscode-tslint 工作区中。添加配置命令要么打开已有的launch.json文件夹中的文件.vscode子文件夹或创建一个新文件夹,并显示调试配置文件模板下拉菜单。

调试模板下拉菜单

配置中使用的变量(例如)${workspaceFolder}或者说,现已废弃的${workspaceRoot})相对于其所属文件夹来解析。可以通过在变量上加上根文件夹名称(用冒号分隔)来为每个工作区文件夹设置变量的作用域。

工作区启动配置

工作空间范围的启动配置存在于“发射”工作区配置文件的部分(工作区:在命令调色板中打开工作区配置文件):

工作区设置

或者,也可以通过启动配置下拉菜单中的“添加配置(工作区)”条目添加新的启动配置:

添加配置

只要名称在工作区内是唯一的,复合发射配置可以通过名称引用各个发射配置,例如:

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

如果单个启动配置名称不唯一,可以用更简洁的“文件夹”语法来指定限定文件夹:

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

此外复合物

发射
  • 在VS代码中打开
  • 在VS Code Insiders中开放
工作区配置文件的部分也可以包含常规的启动配置。确保所有使用的变量都明确作用域到某个特定文件夹,否则它们在工作区中无效。你可以在变量参考中找到更多关于显式作用域变量的详细信息。

这里有一个启动配置的示例,程序存在“Program”文件夹,且在步进时应跳过“Library”文件夹中的所有文件:

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

任务

类似于 VS Code 搜索调试配置,VS Code 还会尝试自动检测工作区中所有文件夹中的 gulp、grunt、npm 和 TypeScript 项目文件中的任务,并搜索定义于tasks.json文件。任务的位置通过文件夹名称后缀表示。注意任务定义在tasks.json一定是2.0.0版本。

任务下拉菜单

从上面TSLint扩展的Workspace示例中,你可以看到有两个配置任务来自tasks.json文件滴滴以及TSLINT测试文件夹以及大量自动检测的 npm 和 TypeScript 编译器检测到任务

工作区任务配置

工作区范围的任务存在于“任务”工作区配置文件中的部分(工作区:在命令调色板中打开工作区配置文件)。只有“壳”以及“过程”类型任务可以在工作区配置文件中定义。

源代码控制

对于多根工作区,有一个“源码控制提供者”部分,可以让你在拥有多个活跃仓库时提供概览。这些数据可以由多个供应链管理提供商贡献;例如,你可以将 Git 仓库与 Azure DevOps 服务器工作区并排放置。当你在这个视图中选择仓库时,可以看到下面的源代码控制详情。

多个供应链管理提供商

你可以用Ctrl+ClickShift+Click来选择多个仓库。它们的详细信息会在下面显示为独立区域。

扩展

如果你是扩展作者,可以参考我们的《采用多根工作空间 API》指南,了解 VS Code 多根工作空间 API,以及如何让你的扩展在多个文件夹间良好运行。

以下是一些采用多根工作区 API 的热门扩展。

注意:如果某个扩展还不支持多个文件夹,它仍然可以在你的多根工作区的第一个文件夹中使用。

扩展建议

VS Code 支持通过extensions.json文件夹下的文件夹.vscode子文件夹。你也可以通过添加全局工作区扩展推荐.code-workspace档案。您可以使用扩展名:配置推荐扩展(Workspace Folder)命令打开您的工作区文件并添加扩展名标识符({publisherName}.{extensionName})映射为扩展。推荐阵列。

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

下一步

常见问题

我怎样才能回到只用一个项目文件夹的工作?

你可以关闭工作区直接打开文件夹,或者从工作区中移除该文件夹。

作为扩展作者,我需要做些什么?

请参阅我们的《采用多根工作空间 API》指南。大多数扩展都能轻松支持多根工作区。