Я играл с этим, который, кажется, работает. Объединяя возможность запускать задачу при открытой папке и сделать эту задачу зависимой от других задач, я придумал следующее. Это выглядит громоздко, но на самом деле это довольно просто и повторяется.
Во-первых, вам понадобится расширение макроса, например 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
в тот же экземпляр терминала, выполнить все нетерминальные команды, изменить фокус на редактор в конце последней настройки терминала и т. Д. c.
Я добавил тонкость именования каждого терминала на основе вашей команды, используя команду workbench.action.terminal.renameWithArg
.
В задачах. 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}"
}
]
Теперь, когда вы открываете (или перезагрузите) папку рабочей области этой задачи. json в четырех терминалах должен быть открыт, назван и запущен. По моему опыту, есть небольшая задержка, прежде чем vscode запустит любую задачу folderOpen.
Если вы предпочитаете вручную запускать задачу Run 4 terminals
, вы можете настроить привязку клавиш следующим образом:
{
"key": "alt+r", // whatever keybinding you want
"command": "workbench.action.tasks.runTask",
"args": "Run 4 terminals on startup"
},
Это демонстрационная программа с привязкой клавиш, которую проще продемонстрировать, чем перезагрузка vscode, но нет никакой разницы. Я добавил интервальную задержку для каждого терминала, работающего только для демонстрационных целей - в противном случае он очень быстрый.
Я заметил, что vscode зависает, если я не t взаимодействовать с одним из терминалов или открыть другой, прежде чем удалять их все.
Существует также расширение Terminal Manager , которое может представлять интерес. Я не пробовал.
Расширение для настройки нескольких терминалов одновременно или просто для запуска некоторых команд.
Но это не очевидно для меня может ли это расширение быть настроено для работы в folderOpen - но, похоже, оно добавляет команду run all the terminals
, поэтому вы сможете использовать ее в задаче.