我一直在玩这个似乎有效的方法。结合在文件夹打开时运行任务和使该任务依赖于其他任务的能力,我想出了以下内容。它看起来很麻烦,但实际上非常简单和重复。
首先,您需要一个宏扩展,例如 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 任务,您可以像这样设置键绑定:
{
"key": "alt+r", // whatever keybinding you want
"command": "workbench.action.tasks.runTask",
"args": "Run 4 terminals on startup"
},
这里是一个使用keybinding运行的demo,比重新加载vscode更容易演示,但是没有区别。我为每个运行的终端添加了一个间隔延迟,仅用于演示目的 - 否则它非常快。
我注意到,如果我不与其中一个终端交互或在全部删除之前打开另一个终端,vscode 就会冻结。
还有一个可能感兴趣的Terminal Manager 扩展名。我没试过。
一次设置多个终端的扩展,或者只是
运行一些命令。
但对我来说,这个扩展是否可以配置为在 folderOpen 上运行并不明显 - 但它似乎贡献了一个 run all the terminals 命令,所以你应该能够在任务中使用它。