Windows 7 で Git Bash も zsh も使いたい

Windows 7コマンドライン版 Git を使用するには Git for Windows をインストールし、 Git Bash を使うのが簡単だWindows 10 には Windows Subsystem for Linux があるのでもう少し簡単にできるらしい)

ところがこの Git Bash では他のシェルは使用できず、bash のみしかサポートしていない。そのため MSYS2 というソフトウェアパッケージを使用し、シェルの設定から行う。

以下 Git Bash がインストールされているものとして話を進める。

MSYS2 を使用する

MSYS2 は簡単にいうと bash 等の PC UNIX 用ソフトウェアを Windows で動かすためのソフトウェアの寄せ集めだ。

インストーラをダウンロード・起動し、インストールが完了したらスタートメニューから MSYS2 MinGW 64-bit(環境によっては 32-bit を選択)を開く。これで bash が起動するが、まずはパッケージのアップデートを行う。

MSYS2 のパッケージマネージャは pacman という名前で、MSYS2 用に独自に作られたものだ。次のコマンドでアップデートができる。

pacman -Suy

次のメッセージが表示されたらアップデートが完了した合図なので MinGW x64 のウィンドウを閉じ、もう一度起動する。

terminate MSYS2 without returning to shell and check for updates again
for example close your terminal window instead of calling exit

そして再び pacman を使用し、必要な、あるいは使いそうなソフトウェアをインストールしていく。パッケージのインストールは pacman -S パッケージ名 で行える。

pacman -S vim sed tar unzip zsh

MSYS2 のログインシェル設定

MSYS2 には chsh コマンドが含まれていない。そのため起動のための Windows コマンド スクリプトから直接シェルの指定を行う。

また標準の状態では Windows 側の環境変数 PATH が引き継がれないので、それを引き継ぐ設定をしておこう。

ここでは MSYS2 をインストールしたディレクトリにある msys2_shell.cmd を terminal.cmd という名前でコピーし、次の箇所を編集した。

15行目:
set MSYS2_PATH_TYPE=inherit

79行目:
  start "%CONTITLE%" "%WD%mintty" -i /msys2.ico -t "%CONTITLE%" /usr/bin/zsh --login %1 %2 %3 %4 %5 %6 %7 %8 %9

これで terminal.cmd を開けば zsh が起動する。

zsh の補完設定

zsh の設定は通常通り ~/.zshrc で行える。普段のように補完設定を行う。

autoload -U compinit
compinit

# 補完時に大小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' menu select=1

ところが MSYS2 上のディレクトリ(例えば /mingw64)では補完が効くが、 Windows 上のドライブ(例えば /c/Windows)では補完ができない問題が発覚した。

どうやら Windows 上のドライブは automount のような仕組みでマウントされているため、次のような fake-files の設定が必要なようだ。

drives=$(mount | sed -rn 's#^[A-Z]: on /([a-z]).*#\1#p' | tr '\n' ' ')
zstyle ':completion:*' fake-files /: "/:$drives"
unset drives

Git を使用する

ここまで設定すれば which git コマンドを叩くと Git for Windows でインストールされた git コマンドの場所が出力されるはずだ。

あとは Git Bash と同様に使用すればよい。