我在 Mac 上💻。我正在尝试探索一种创建 4 个终端的方法,只要我 dbl 单击我的工作区文件。
我试图让一个工作,但我似乎卡住了

{
    "folders": [
        {
            "path": "/Users/bheng/Sites/laravel/project"
        }
    ],
    "settings": {
        "workbench.action.terminal.focus": true,
        "terminal.integrated.shell.osx": "ls",
        "terminal.integrated.shellArgs.osx": [
            "ls -lrt"
         ]
    },
    "extensions": {}
}

我的目标是开4个航站楼
  • 终端 1:运行 'npm run watch'
  • 终端 2:运行 'ls -lrt'
  • Terminal3:运行“ssh_staging”
  • 终端 4:运行 'mysql'


  • 我一直在关注这个文档:https://code.visualstudio.com/docs/editor/integrated-terminal#_terminal-keybindings

    对我有什么提示吗?

    最佳答案

    我一直在玩这个似乎有效的方法。结合在文件夹打开时运行任务并使该任务依赖于其他任务的能力,我想出了以下内容。它看起来很麻烦,但实际上非常简单和重复。

    首先,您需要一个宏扩展,如 multi-command 。将其放入您的设置中:

    "multiCommand.commands": [
    
        {
          "command": "multiCommand.runInFirstTerminal",
          "sequence": [
            "workbench.action.terminal.new",
            {
              "command": "workbench.action.terminal.renameWithArg",
              "args": {
                "name": "npm watch"
              }
            },
            {
              "command": "workbench.action.terminal.sendSequence",
              "args": {
                "text": "npm run watch\u000D"  // \u000D is a return so it runs
              }
            }
          ]
        },
        {
          "command": "multiCommand.runInSecondTerminal",
          "sequence": [
            "workbench.action.terminal.new",
            {
              "command": "workbench.action.terminal.renameWithArg",
              "args": {
                "name": "ls -lrt"
              }
            },
            {
              "command": "workbench.action.terminal.sendSequence",
              "args": {
                "text": "ls -lrt\u000D"
              }
            }
          ]
        },
        {
          "command": "multiCommand.runInThirdTerminal",
          "sequence": [
            "workbench.action.terminal.new",
            {
              "command": "workbench.action.terminal.renameWithArg",
              "args": {
                "name": "ssh_staging"
              }
            },
            {
              "command": "workbench.action.terminal.sendSequence",
              "args": {
                "text": "ssh_staging\u000D"  // however you run the ssh_staging command
              }
            }
          ]
        },
        {
          "command": "multiCommand.runInFourthTerminal",
          "sequence": [
            "workbench.action.terminal.new",
            {
              "command": "workbench.action.terminal.renameWithArg",
              "args": {
                "name": "mysql"
              }
            },
            {
              "command": "workbench.action.terminal.sendSequence",
              "args": {
                "text": "mysql\u000D"  // however you run the mysql command
              }
            },
            // "workbench.action.focusActiveEditorGroup"
          ]
        }
    ]
    

    每个终端有一个命令。但是在每一个中,你可以做尽可能多的宏 - 这是很多,特别是感谢 sendSequence 命令。您可以更改目录并将另一个 sendSequence 命令发送到同一个终端实例,也可以运行所有非终端命令,在最后一个终端设置结束时将焦点更改为编辑器等。

    我添加了使用命令 workbench.action.terminal.renameWithArg 根据您的命令命名每个终端的细节。

    在tasks.json中:
     "tasks": [
    
        {
          "label": "Run 4 terminals on startup",
          "runOptions": {"runOn": "folderOpen"},
    
          "dependsOrder": "sequence",  // or parallel
    
          "dependsOn": [
            "terminal1",
            "terminal2",
            "terminal3",
            "terminal4"
          ]
        },
    
        {
          "label": "terminal1",
          "command": "${command:multiCommand.runInFirstTerminal}"
        },
        {
          "label": "terminal2",
          "command": "${command:multiCommand.runInSecondTerminal}",
        },
        {
          "label": "terminal3",
          "command": "${command:multiCommand.runInThirdTerminal}"
        },
        {
          "label": "terminal4",
          "command": "${command:multiCommand.runInFourthTerminal}"
        }
     ]
    

    现在,无论何时打开(或重新加载)工作区文件夹,都应该打开、命名和运行四个终端中的 tasks.json。根据我的经验,在 vscode 运行任何 folderOpen 任务之前大约有一段短暂的延迟。

    如果您更喜欢手动触发 Run 4 terminals 任务,您可以像这样设置键绑定(bind):
    {
      "key": "alt+r",     // whatever keybinding you want
      "command": "workbench.action.tasks.runTask",
      "args": "Run 4 terminals on startup"
    },
    

    这里有一个使用keybinding运行的demo,比重装vscode更容易演示,但是没有区别。我为每个运行的终端添加了一个间隔延迟,只是为了演示目的——否则它会非常快。

    macos - 在 VSCode 中创建多个终端并运行命令-LMLPHP

    我注意到如果在删除所有终端之前我不与其中一个终端交互或打开另一个终端,vscode 会卡住。

    还有一个 Terminal Manager 扩展可能很有趣。我没试过。



    但是我不清楚这个扩展是否可以配置为在 folderOpen 上运行 - 但它似乎贡献了一个 run all the terminals 命令,所以你应该能够在任务中使用它。

    关于macos - 在 VSCode 中创建多个终端并运行命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60621321/

    10-15 16:09