如何轻松地将 Visual Studio 代码工作区移动到新位置?

How to move a Visual Studio Code workspace to a new location painlessly?

我认为 VS Code 将所有相关元数据保存在 .vscode 文件夹和 .code-workspace 文件中,并且由于这些包含在工作区文件夹中,我认为它都是独立的,不会引起问题移动时。但显然我 严重错误

将我的工作区文件夹移动到新位置并相应地更改保存在 .code-workspace 文件中的文件夹路径后 我所有打开的编辑器窗格和底部面板都消失了。我现在拥有的是一个很好的 欢迎 window.

我知道官方指南 recommends,但这只是移动 .code-worskpace 图元文件 - 文件夹仍保留在原处。

场景 1 - 移动 .code-workspace 文件 定义项目文件夹位置的 xxx.code-workspace 文件位于 JSON格式。它有一个“folders” 部分和一个 "settings" 部分。如果您只是想移动 xxx.code-workspace 的位置,只需转到 File->Save Workspace As...,浏览到新位置, select 您要为工作区指定的名称,它将使用 .code-workspace 扩展名保存它。 "folders" 部分中的所有 "path" 条目都更改为相对于新位置的路径。

场景 2 - 移动整个工作空间。如果你想将整个工作空间移动到一个新的位置,并且 .code-workspace 文件在你的工作空间的根目录中,只需将旧工作区移动到新位置即可。 .code-workspace 文件的内容仍然是正确的。只需 select File->Open Workspace...,导航到新位置并打开 .code-workspace 文件。

场景 3 - 当您的 .code-workspace 文件夹存储在不同的位置时。如果您将所有 .code-workspace 文件存储在不同于实际位置的位置工作区,移动工作区的最简单方法是一个两步过程:

  • 打开工作区后,执行文件->将工作区另存为...,然后将 .code 工作区文件保存到工作区的根目录。
  • 将工作区移动到新位置。
  • File->Save Workspace As... 并将 .code 工作区文件保存到它的位置。
  • 关闭 VS Code 并删除资源根目录中的 .code-workspace 文件夹,以便将来的设置更改保存到正确的工作区。

我刚刚 运行 遇到了同样的问题。我的工作区根本没有保存到文件中(我只是在每个项目文件夹上使用 "Open with Code" 选项),并且将工作区另存为选项没有帮助,因为它只是创建了一个 JSON 文件其中有几个空对象(这可能是有道理的,因为我没有真正修改任何工作区设置,我只是想保留我打开的编辑器和类似的东西)。

至少在 Windows 上,这些 "workspace" 设置似乎实际上存储在 %APPDATA%\Code\User\workspaceStorage 的子文件夹中,一个 SQLite 数据库文件用于存储实际设置,所以这就是我最终做的:

  • 将文件夹移动到磁盘上的新位置(先关闭所有 VS Code windows)

  • 使用 VS Code 打开新文件夹位置(在此阶段您只会看到“欢迎”选项卡,但我们只需要它来为新位置创建一个设置存储文件夹)。然后再次关闭VS code。

  • 在文件资源管理器中打开 %APPDATA%\Code\User\workspaceStorage,进入每个子文件夹并打开 workspace.json(在任何旧的文本编辑器中)。至少在我的例子中,它只包含一个 folder 属性,这是与此设置文件夹相关的文件夹的路径(但仅仅更改它对我们没有帮助所有,这是我尝试的第一件事)。使用它来确定哪些子文件夹与 oldnew 路径相关。

  • state.vscdbold 复制到 new , 并在 new.

  • 中删除 state.vscdb.backup
  • new 中打开 state.vscdb 在某种 SQLite 数据库文件编辑器中(我使用 DB Browser for SQLite and it worked fine, but there's also SQLiteStudio 看起来一般情况下可能会更好)。

  • 运行 更新数据库中所有路径的 UPDATE 查询。它们似乎存储在三个不同的 formats/levels 转义中 - 文件夹之间可以有一个正斜杠、两个反斜杠或四个反斜杠。在我的例子中,我想将我的项目文件夹从我的 Windows 用户文件夹的根目录移动到我在 OneDrive 中的常用文档文件夹中,所以我的查询如下所示,因为我只需要更改每条路径的中间部分。例如,如果您要移动到不同的驱动器,则可能需要做一些更复杂的事情(需要查看数据库中所有现有路径以了解它们是如何编码的)。

UPDATE `ItemTable` SET `value` = REPLACE(REPLACE(REPLACE(`value`, 'User/Project', 'User/OneDrive/Documents/Project'), 'User\Project', 'User\OneDrive\Documents\Project'), 'User\\Project', 'User\\OneDrive\\Documents\\Project')

保存数据库后,我刚刚在 VS Code 中打开了新文件夹,所有内容似乎都已加载,就像在旧位置一样:)

(另外,以防万一有人好奇,workspaceStorage 中的子文件夹名称似乎是某种基于路径的哈希,因为如果删除与之前在 VS Code 中打开的文件夹相关的子文件夹然后再次在代码中打开该文件夹,它会重新创建相同的子文件夹名称。这意味着仅更新旧的 workspace.json 和就地数据库文件将不起作用)