Skip to content

Instantly share code, notes, and snippets.

@dhkatz
Last active June 23, 2024 22:09
Show Gist options
  • Save dhkatz/106891324c9624074a84d11e2691144b to your computer and use it in GitHub Desktop.
Save dhkatz/106891324c9624074a84d11e2691144b to your computer and use it in GitHub Desktop.
Using MSYS2 with Visual Studio Code

Using MSYS2 with Visual Studio Code is extremely easy now thanks to the Shell Launcher extension by Tyriar.

First, install the extension and reload Visual Studio Code.

Then, open the settings.json to edit your settings.

Add the field shellLauncher.shells.windows. I recommend using autocompletion here so that all the default shells are added.

You should having something like this now:

{
    "shellLauncher.shells.windows": [
        {
            "shell": "C:\\Windows\\System32\\cmd.exe",
            "label": "cmd"
        },
        {
            "shell": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
            "label": "PowerShell"
        },
        {
            "shell": "C:\\Program Files\\Git\\bin\\bash.exe",
            "label": "Git bash"
        },
        {
            "shell": "C:\\Windows\\System32\\bash.exe",
            "label": "WSL Bash"
        }
    ]
}

Now you have to add the MSYS2 bash to the list of shells.

Add this shell into the list. The path to your installing of MSYS2 may be different. Just find the path to bash.exe in /usr/bin/.

{
    "shell": "C:\\msys64\\usr\\bin\\bash.exe",
    "label": "MSYS2",
    "args": ["--login", "-i"],
    "env": {
        "MSYSTEM": "MINGW64",
        "CHERE_INVOKING": "1",
        "MSYS2_PATH_TYPE": "inherit"
    }
}

You can choose to remove MSYS2_PATH_TYPE if you don't want your shell to inherit all the existing PATH settings from Windows.

@tiagofrancafernandes
Copy link

For msys64 you can use

    "terminal.integrated.profiles.windows": {
        "msys64 - bash": {
            "path": "C:\\msys64\\usr\\bin\\bash.exe"
            // ,"args": [
            //     "-arg1",
            //     "-ar2"
            // ]
        }
    },
    "terminal.integrated.defaultProfile.windows": "msys64 - bash"

@PanicNOR
Copy link

PanicNOR commented Jan 22, 2024

the "args": ["--login", "-i"], method didn't work for me because of the "-i" args..
here I use cmd.exe to call "msys2_shell.cmd"..

"terminal.integrated.profiles.windows": {
    "MSYS64 UCRT (cmd + zsh)": { 
      "path": "cmd.exe",
      "args": [
        "/c",
        "C:\\msys64\\msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell zsh"
      ],
      "env": {
        "MSYSTEM": "UCRT64",
        // "CHERE_INVOKING": "1", //- Default way
        "PATH": "/ucrt64/bin:/usr/bin:/usr/local/bin:/bin:${env:PATH}" //- custom path, force-search "/ucrt64/bin" path first.
      }
    }
},
"terminal.integrated.env.windows": { 
    "MSYSTEM": "UCRT64",
    // "CHERE_INVOKING": "1", //- Default way
    "PATH": "/ucrt64/bin:/usr/bin:/usr/local/bin:/bin:${env:PATH}"
},
"terminal.integrated.defaultProfile.windows": "MSYS64 UCRT (cmd + zsh)",

@prashant-kiit
Copy link

Thanks @tiagofrancafernandes. It worked.

@ThisNoName
Copy link

@PanicNOR

the "args": ["--login", "-i"], method didn't work for me because of the "-i" args.. here I use cmd.exe to call "msys2_shell.cmd"..

Trying to setup fish shell on a new machine, had msys2_shell.cmd worked but looking for a cleaner solution. Always had the -i and never thought about it, until stumbled upon your comment. In the end, this worked for me. Thanks.

  // fish shell integration
  "terminal.integrated.defaultProfile.windows": "fish",
  "terminal.integrated.profiles.windows": {
    "fish": {
      "path": "C:\\msys64\\usr\\bin\\fish.exe",
      "args": ["--login"],
      "env": {
        "MSYSTEM": "MINGW64",
        "CHERE_INVOKING": "1",
        "MSYS2_PATH_TYPE": "inherit"
      }
    },
    // alternative integration via msys2_shell.cmd
    // "MSYS2 Fish": {
    //   "path": "cmd.exe",
    //   "overrideName": true,
    //   "icon": "terminal-cmd",
    //   "args": [
    //     "/c",
    //     "C:\\msys64\\msys2_shell.cmd -defterm -here -no-start -ucrt64"
    //   ]
    // },

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment