Visual Studio Code for Windows の Integrated Terminal に MSYS2 の fish を使う
fish、便利です。
当方は未だにWindows 8.1 UpdateなのでWSL1は使えません。
なので Git for Windows SDK をインストールして簡易的なシェル環境を構築してます。
これが pacman があるのでなかなか快適なんですね。
nodeもこれで入れられるのでchocolateyもほぼ不要になります。
Git for Windows の本来のシェルは Git Bash ですが、他のシェルも pacman 経由でインストールできるため、私は fish をインストールしてこれをデフォルトにしています。
本題です。
慣れたシェルを使っていると、あらゆる場面で導入したくなるもので、VSCode の Integrated Terminal にも fish を導入したくなりました。
で、おもむろに Ctrl + ,
で設定画面出しますね。
{ "terminal.integrated.shell.windows": "C:/git-sdk-64/usr/bin/fish.exe", "terminal.integrated.shellArgs.windows": [ "-i", "--login", ], }
と入力します。2
Ctrl + @
でターミナルを表示するとどうでしょう、エラーの嵐になります。
いろいろ調べた結果、 $PATH
がほとんど空っぽになっていることが分かりました。
"C:/git-sdk-64/usr/bin/fish.exe"
の代わりに "C:/git-sdk-64/usr/bin/bash.exe"
と書いた場合は何の問題もなく起動し、パスも普通に通ってしまうので謎です。
ちなみに bash でうまく行くからと言って
{ "terminal.integrated.shell.windows": "C:/git-sdk-64/usr/bin/bash.exe", "terminal.integrated.shellArgs.windows": [ "-c", "/usr/bin/fish", ], }
としても無駄です。
盛大にエラります。
結構な時間を試行錯誤でアレコレし、
{ "terminal.integrated.shell.windows": "C:/git-sdk-64/usr/bin/fish.exe", "terminal.integrated.shellArgs.windows": [ "-c", "eval 'set -x PATH ~/bin /mingw64/bin /usr/bin $PATH; and /usr/bin/fish'", ], }
と書くことでひとまず解決しました。
fish では変数にスペース区切りで値を与えると配列として格納されます。
$PATH
も配列で持っているので、その先頭に強引にパスを与えてしまいます。
fish.exe をコールしている段階では $PATH
は無事のようなので、ここで set -x PATH ...
としてしまいました。3
VSCode には、シェルに与える環境変数をオーバーライドする terminal.integrated.env.windows
という設定値もあるのですが、ここだと ~
や $PATH
が展開されない為、已む無くコマンド評価で与えています。
正直言ってワークアラウンド的でスマートさに欠けるので、もっといい方法があれば是非教えていただきたいですね。
あとなぜ $PATH
が消え去るのかの原因も分かる方いらっしゃれば…。