Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VSCode: Open new terminal as part of task?

Visual Studio Code was just updated to allow running a task and having them open in a split terminal. This is great, however I'm looking for one more thing to make this perfect.

I would like to be able to open a total of 3 terminals via a task. One for my NPM build, one for my backend MAVEN build, and a third that is just a blank new terminal I can use for git commands when needed.

I can't seem to find a way to tell VSC to run a task that just opens a new terminal ready to use without providing it a command. I would even settle with giving it a simple command like "node -v" just to start it out, as long as that panel is still usable after. Right now it wants to close it after it has ran.

Here is my task setup: I have one task setup as the build task that depends on two others. I envision adding a third one to that which would just open the new terminal:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Run Maven and NPM",
      "dependsOn": [ "maven", "npm" ],
      "group": {
        "kind": "build",
        "isDefault": true,
      },
    },
    {
      "label": "maven",
      "command": "...",
      "type": "shell",
      "presentation": {
        "reveal": "always",
        "group": "build"
      },
      "options": {
        "cwd": "${workspaceRoot}/server"
      }
    },
    {
      "label": "npm",
      "type": "shell",
      "command": "ng serve --port 4203 --proxy-config proxy.conf.json",
      "presentation": {
        "reveal": "always",
        "group": "build"
      },
      "options": {
        "cwd": "${workspaceRoot}/client-APS"
      }
    }
  ]
}
like image 931
BlueCaret Avatar asked Feb 07 '19 17:02

BlueCaret


People also ask

How do you put terminal on right side in VS Code?

Conversation. VSCode tip: You can move the sidebar/file explorer to the right-hand side of your editor via View > Appearance > Move Side Bar Right. Try it out, and give yourself enough time to get used to it.


1 Answers

The following should work:

{
    "type": "process",
    "label": "terminal",
    "command": "/bin/bash",  // <-- your shell here
    "args": [
        "-l"  // login shell for bash
    ],
    "problemMatcher": [],
    "presentation": {
        "echo": false,  // silence "Executing task ..."
        "focus": true,
        "group": "build",  // some arbitrary name for the group
        "panel": "dedicated"
    },
    "runOptions": {
        "runOn": "folderOpen"
    }
}

I was trying to achieve something very similar when I stumbled my way into this solution: Here, I'm auto-launching (and setting the focus on) the terminal when the folder is opened in vscode -- and further tasks that share the same presentation.group gets placed in split terminals when they're run (with new vs. reused splits depending on their presentation.panel)

(The runOptions bit is superfluous for your case, but I'm keeping it in case it is helpful for someone)

Note: For this example, you may or may not need the -l option depending on your settings for terminal.integrated.shell*, terminal.integrated.automationShell* and terminal.integrated.inheritEnv -- this issue has some discussion on what is involved in setting up the shell environment.

like image 133
iutlu Avatar answered Oct 03 '22 08:10

iutlu