在 VS Code 中,存储一组文件选项卡,以便我将来可以恢复特定环境

Dav*_*wys 13 visual-studio-code

VS Code 会记住上次环境中工作区中打开的文件选项卡,因此如果我关闭 VS Code 并重新打开,我会打开相同的文件。

在一两天的工作中,当我的 PR 接受审核时,我可能会在 2 或 3 个不同的功能分支之间切换。

每个功能分支通常位于代码库的完全不同的区域,这意味着,在处理每个分支时我希望打开不同的文件组。

我想知道是否有一种方法可以保存打开的选项卡的快照,以便我将来可以重新打开。

一个非常好的流程是当 VS Code 检测到分支更改时自动打开这些文件,同时关闭其他文件。

Mar*_*ark 4

  1. 获取当前打开的文件的“快照”。
  2. 将此快照保存在某处;使其易于更改。
  3. 使用快照打开其所有文件;首先关闭所有其他文件。
  4. 能够制作多个快照并轻松调用每个快照。

(1)比你想象的要难。vscode 存在许多关于仅在当前打开的文件中搜索的问题,并且由于这个原因,该问题在几年后仍未得到解决。

演示:获取所有打开文件的相对路径(不幸的是,gif 创建软件在捕获所有这些演示中使用的所有击键方面做得很差):

获取打开文件的相对路径演示

天哪,刚刚发生了什么。一个键绑定,它们就会以特定的方式收集和格式化。

发生了很多事情。据我所知,有效获取打开文件列表的唯一方法(即使在扩展中也可能如此)是通过“打开编辑器”视图。所以我们

(a) 关注“打开编辑器”视图,

(b) 选择整个列表,幸运的是有一个

(c) copyRelativeFilePath命令(或copyPath完整路径),将它们全部放入列表中。

但该列表最初看起来是这样的:

1.html
simple\\gulpfile.js
test1.txt
Run Code Online (Sandbox Code Playgroud)

这对我们没有多大好处。但现在它有ClipBoard一个扩展,替换规则,它能够通过一系列正则表达式运行剪贴板内容(也不修改剪贴板内容)并将结果粘贴到某处。因此,您将需要该扩展和宏扩展,此处使用多命令来运行所有步骤。这是进入 settings.json 的宏:

  "multiCommand.commands": [

   {
      "command": "multiCommand.getOpenedEditorsForTaskOpenAll",
      "interval": 50,

      "sequence": [
        "workbench.files.action.focusOpenEditorsView",
        "list.selectAll",
        "copyRelativeFilePath",
        // "copyFilePath",
        "workbench.action.focusActiveEditorGroup",
        {
          "command": "replacerules.pasteAndReplace",
          "args": {
              "ruleName": "Prepare file list for task open"
          }
        },
        "editor.action.formatSelection",
        "cancelSelection",
        "deleteLeft"
      ]
    }
  ]
Run Code Online (Sandbox Code Playgroud)

这是replacerules宏中使用的规则:

"replacerules.rules": {

   "Prepare file list for task open": {
    "find": ["(\\\\)", "^(.+)$"],
    "replace": ["\\\\", "\"'$1'\","]
  }
}
Run Code Online (Sandbox Code Playgroud)

它只是将裸文件列表修改为我们可以在任务中使用的内容。这是运行该宏的键绑定(keybindings.json):

{
  "key": "ctrl+shift+i",
  "command": "extension.multiCommand.execute",
  "args": {
    "command": "multiCommand.getOpenedEditorsForTaskOpenAll"
  },
}
Run Code Online (Sandbox Code Playgroud)

您应该已经能够对此进行测试,看看它是否会将格式化文件列表转储到光标在当前文本编辑器中的任何位置。


一次打开所有这些文件的一种方法是将它们放入一个任务中(在tasks.json中):

{
  "label": "Open snapshot 1",
  "command": "code",
  "args": [

  ],
  "type": "shell",
  "problemMatcher": [],
  "dependsOrder": "sequence",
  "dependsOn": [ "close all editors" ]
},

{
  "label": "close all editors",
  "command": "${command:workbench.action.closeAllEditors}",
  "type": "shell",
  "problemMatcher": []
},
Run Code Online (Sandbox Code Playgroud)

您会看到任务Open snapshot 1依赖于close all editors任务,因此首先发生。该Open snapshot 1命令是code打开所有arg文件。将光标放在args数组中,宏将在该数组中写入格式正确的要打开的文件列表。演示:

将打开的文件插入任务的演示

如果您想更新该文件列表,只需选择它们并重新运行宏即可。Open snapshot <n>现在,您可以根据需要设置任意数量的任务(使用您想要赋予它们的任何标签)。

现在,为了触发任务,我们还将使用键绑定:

  {
    "key": "alt+s 1",
    "command": "workbench.action.tasks.runTask",
    "args": "Open snapshot 1"
  },
  {
    "key": "alt+s 2",
    "command": "workbench.action.tasks.runTask",
    "args": "Open snapshot 2"
  },
Run Code Online (Sandbox Code Playgroud)

如前所述,运行此任务将首先运行依赖任务,该任务将关闭所有当前打开的文件。如果您只想打开一批经常使用的文件而不关闭其他文件,只需删除该"dependsOn": [ "close all editors" ]选项即可。

这是关闭打开的文件和打开snapshot文件的任务的最终演示(我只是稍微更改了上面的文件列表以使其看起来有所不同)。

打开和关闭文件的任务演示


要记住两件事:

(1)Editor > Open Editors: Visible必须启用该设置并设置足够高的数字以显示所有打开的文件。可以将其Open Editors隐藏,这样您就不必一直查看它(如果您不想),但它会被宏自动打开 - 这是无法避免的。您可以在演示中看到它打开。它可以通过其上下文菜单隐藏。

(2) 终端已使用,因此您看到它打开。


看起来设置很多,但操作实际上非常简单 - 只需记住几个按键绑定即可。