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