Создайте несколько терминалов и запускайте команды в VSCode - PullRequest
3 голосов
/ 10 марта 2020

Я на Ма c ?. Я пытаюсь найти способ создания 4 терминалов, как только щелкну левой кнопкой мыши по файлу рабочей области. Я пытался заставить его работать, но мне кажется, что я застрял

{
    "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 терминала

  • Terminal1: запустить 'npm запустить посмотреть'
  • Terminal2: запустить 'ls -lrt'
  • Terminal3: запустить 'ssh_staging'
  • Terminal4: запустить 'mysql'

Я следую за этим, сделайте c: https://code.visualstudio.com/docs/editor/integrated-terminal#_terminal -ключения клавиш

Любые подсказки для меня?

1 Ответ

3 голосов
/ 13 марта 2020

Я играл с этим, который, кажется, работает. Объединяя возможность запускать задачу при открытой папке и сделать эту задачу зависимой от других задач, я придумал следующее. Это выглядит громоздко, но на самом деле это довольно просто и повторяется.

Во-первых, вам понадобится расширение макроса, например 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, но нет никакой разницы. Я добавил интервальную задержку для каждого терминала, работающего только для демонстрационных целей - в противном случае он очень быстрый.

opening four terminals and running commands in them

Я заметил, что vscode зависает, если я не t взаимодействовать с одним из терминалов или открыть другой, прежде чем удалять их все.


Существует также расширение Terminal Manager , которое может представлять интерес. Я не пробовал.

Расширение для настройки нескольких терминалов одновременно или просто для запуска некоторых команд.

Но это не очевидно для меня может ли это расширение быть настроено для работы в folderOpen - но, похоже, оно добавляет команду run all the terminals, поэтому вы сможете использовать ее в задаче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...