zaki work log

作業ログやら生活ログやらなんやら

[VS Code / Windows] ターミナルのデフォルトシェルをGit BashやCygwinのシェルにする

WindowsにインストールしたVS CodeのターミナルはデフォルトでPowerShellだけど、設定でGit BashCygwinのシェルに変更できる。

設定方法

Git Bash

Git for WindowsをインストールするとついてくるGit Bashは、VS Codeが自動で認識するので設定画面で設定できる。
「Features > Terminal > Integrated › Default Profile: Windows」を探し、ドロップダウンメニューから「Git Bash」を選択する。

settings.jsonに直接記述する場合は以下の通り。

    "terminal.integrated.defaultProfile.windows": "Git Bash",

Cygwin bash

Cygwinbashをデフォルトのシェルにする場合は、デフォルトシェルの設定に加えてCygwinbashVS Codeに認識させる(登録する)必要がある。設定は以下の通り。
設定の雛形は「Features > Terminal > Integrated > Profiles: Windows」の「Edit in settings.json」をクリックすればsettings.jsonに挿入される。

    "terminal.integrated.defaultProfile.windows": "Cygwin",
    "terminal.integrated.profiles.windows": {
        "Cygwin": {
            "path": "C:\\cygwin64\\bin\\bash.exe",
            "args": ["--login"]
        },
    }

terminal.integrated.profiles.windows"設定名": { "path": "シェルの実行ファイルのパス", "args": "実行ファイルの引数"}を指定する。
デフォルトで使えるPowerShellとGit Bashの設定は不要(無くても動作する)

--loginは無くても動作の違いが実はわかっていないんだけど、指定しなくても良いのかな?(「明示的にログインする」場合に指定するらしいけど、VS Codeからの「起動」は当てはまらない、とか…?)

Cygwin zsh

Cygwin bashの場合と基本的に同じ。前述のCygwin bashzshも追加で設定する場合は以下の通り。

    "terminal.integrated.defaultProfile.windows": "Cygwin zsh",
    "terminal.integrated.profiles.windows": {
        "Cygwin zsh": {
            "path": "C:\\cygwin64\\bin\\zsh.exe",
            "args": ["--login"]
        },
        "Cygwin": {
            "path": "C:\\cygwin64\\bin\\bash.exe",
            "args": ["--login"]
        },
    }

以前はbash.exeをまず呼び出して、chereパッケージに含まれるxhereを使って["/bin/xhere", "/bin/zsh"]と引数に指定したりしてたけど不要になってる。

補足

ググるterminal.integrated.shell.windowsを設定する例がヒットするが、現在この設定はdeprecatedになっている。設定しているとVS CodeのUIの設定画面だと警告が表示される。

This is deprecated, the new recommended way to configure your default shell is by creating a terminal profile in Terminal › Integrated › Profiles: Windows and setting its profile name as the default in Terminal › Integrated › Default Profile: Windows. This will currently take priority over the new profiles settings but that will change in the future.

これはCygwinのシェルをセットするときに使う。 terminal.integrated.shellArgs.windowsについても同様。