要約
Visual Studio Code 1.55 では統合ターミナルを起動する際にプロファイルを選択できるようになりました。この記事では MSYS2 の bash を起動するためのプロファイルの設定方法を紹介します。(追記: 1.56 で環境変数の設定もできるようになりましたので、記事の一部を修正しています。修正後の記事では 1.57.0 の環境を基にしています)
設定するには、次のようなプロパティ terminal.integrated.profiles.windows を settings.json に追加します。詳細は後で解説しますが、"PowerShell", "Command Prompt", "Git Bash" がデフォルト設定からコピーした部分で、"MSYS2 Bash" が追加した設定になります。
// ターミナルのドロップダウンを使用して新しいターミナルを作成するときに表示する Windows プロファイル。除外する場合は null に設定し、検出された既定の構成を使用する場合は `source` プロパティを使用します。または、`path` とオプションの `args`. を設定します
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": []
},
"Git Bash": {
"source": "Git Bash"
},
"MSYS2 Bash": {
"path": [
"C:\\msys64\\usr\\bin\\bash.exe"
],
"args": [
"--login"
],
"env": {
"MSYSTEM": "MINGW64",
"CHERE_INVOKING": "1"
}
},
はじめに
最近の VSCode (March 2021, Version 1.55 以降) では統合ターミナルを起動する際にプロファイルを選択できるようになりました。Windows では PowerShell, Command Prompt, Git Bash などが使用できるようになっています (Git Bash を使用するには Windows 用の Git がインストールされている必要があります)。
MSYS2 Bash を起動するための設定を統合ターミナルのプロファイルに追加すると、統合ターミナルで MSYS2 を使用できるようになります。また、用途に応じて複数のプロファイルをドロップダウンメニューで切り替えることが可能です。
下図は、VSCode 1.57.0 における統合ターミナルのドロップダウンメニューです。
設定
terminal.integrated.profiles.windows
Windows 用の統合ターミナルのプロファイルは terminal.integrated.profiles.windows で設定されています。VSCode 1.57.0 の規定の設定 (defaultSettings.json) では該当箇所は下記のようになっています。
// ターミナルのドロップダウンを使用して新しいターミナルを作成するときに表示する Windows プロファイル。除外する場合は null に設定し、検出された既定の構成を使用する場合は `source` プロパティを使用します。または、`path` とオプションの `args`. を設定します
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
}
},
ここで "PowerShell", "Command Prompt", "Git Bash" が各プロファイルのキーであり、ドロップダウンメニューの項目名の元になります。
プロファイルの内容を見ると、source
が設定されている場合と、path
と args
が設定されている場合の2通りがあることがわかります。設定ファイルのコメントにあるように、source
は VSCode が検出する規定の設定を使用する場合、path
は実行するファイルを直接指定する場合に設定します。
MSYS2 Bash の設定を追加する
terminal.integrated.profiles.windows にプロファイルを追加する
規定の設定 (defaultSettings.json) の該当箇所を基本設定 (settings.json) の方にコピーして、MSYS2 bash を実行するのに必要な情報を追加します。
本来であれば、terminal.integrated.profiles.windows に "MSYS2 Bash" を追加して、path
と args
を設定するだけでよいはずでした。
例えば次のように設定すると、統合ターミナルのドロップダウンメニューに "new MSYS Bash" が追加されます。path
で指定した実行ファイルが存在しないときはメニューに追加されません。表示されないときは path
の指定内容が正しいかどうか確認してください。
"MSYS2 Bash": {
"path": [
"C:\\msys64\\usr\\bin\\bash.exe"
],
"args": []
}
MSYS2 実行環境が設定されるようにする
前節の設定で起動した MSYS2 bash は正しく動作しません。正しい動作に必要な環境変数の設定が不足しているためです。
「Visual Studio Code 15.1の統合シェルをMSYS2のbashにする」によれば、MSYS2 bash を実行する際に環境変数 MSYSTEM
, CHERE_INVOKING
を設定し、bash の引数に --login
を指定する必要があります。
引数の方はプロファイルの args
に指定すればよいのですが、環境変数を指定することができません。プロファイルの属性に env
のようなものはなさそうです1。
ここでは bash の代わりに MSYS2 の env を呼び出すことにしました。MSYS2 の bash が使用できる環境であればたいていは env も使用できるでしょう。他にはラッパーのバッチファイルを自前で用意したり、.bashrc の中でなんとかする方法もあるかと思います。
前述したように、VSCode 1.56 以降で env
が追加され、プロファイル毎に追加の環境変数の設定を行うことが可能となっているので、env
を使用します。
設定内容は次のようになります。コマンドパスや環境変数 MSYSTEM
の値などは使用する環境に合わせて読み替えてください。
"MSYS2 Bash": {
"path": [
"C:\\msys64\\usr\\bin\\bash.exe"
],
"args": [
"--login"
],
"env": {
"MSYSTEM=MINGW64",
"CHERE_INVOKING=1"
}
},
唐突に "overrideName": true
という記述が現れました。
path
で指定したコマンド名が bash でなく env になったので、実行中の統合ターミナルの表示も "env" となってしまいます。overrideName
を true
にすると、コマンド名 "env" の代わりにプロファイルの名前 "MSYS2 Bash" が表示されるようになります。
まとめ
プロパティ terminal.integrated.profiles.windows を settings.json に追加します。
// ターミナルのドロップダウンを使用して新しいターミナルを作成するときに表示する Windows プロファイル。除外する場合は null に設定し、検出された既定の構成を使用する場合は `source` プロパティを使用します。または、`path` とオプションの `args`. を設定します
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": []
},
"Git Bash": {
"source": "Git Bash"
},
"MSYS2 Bash": {
"path": [
"C:\\msys64\\usr\\bin\\bash.exe"
],
"args": [
"--login"
],
"env": {
"MSYSTEM": "MINGW64",
"CHERE_INVOKING": "1"
}
},
参考
- Visual Studio Code 15.1の統合シェルをMSYS2のbashにする
- Visual Studio Code: Updates March 2021 (Version 1.55) Integrated Terminal
-
コメント欄で insider の VSCode には env サポートが追加されているとの情報をいただきました。env が使用できるとより自然に記述することができますね。~~stable に来るのが楽しみです。~~リリースされたので本文を修正しました。 ↩