お知らせ
現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
MSYS2でzsh使いたくない?使いたいよね?そう、使いたい!
しかしその上で一つ大きな障害があります
MSYS2のzshでプロンプトにGitのブランチを表示させようとすると微妙に上手くいきません
.zshrc
を使ってPROMPT
に現在のGitブランチの状態を表示させようとするとフリーズするケースがあります
具体的には以下のような設定を書くとターミナルのサイズ変更時にシェルがフリーズします
原因は不明ですがPROMPT='$(git)'
だけでフリーズするのでGit for Windowsとの相性がなにか良くないのだと思っています
# git functions
current_git_branch() {
(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
}
parse_git_dirty() {
local DIRTY=$(git status -s | tail -1)
if [[ -n $DIRTY ]]; then
echo "%{$fg_bold[magenta]%})%{$fg_bold[red]%}✗"
else
echo "%{$fg_bold[magenta]%})%{$fg_bold[blue]%}✓"
fi
}
print_git_prompt() {
local FIND_BRANCH=$(git branch 2> /dev/null | tail -1)
if [[ -n $FIND_BRANCH ]]; then
echo "%{$fg_bold[magenta]%}(%{$reset_color%}%{$fg_bold[yellow]%}"$(current_git_branch)$(parse_git_dirty)" %{$reset_color%} "
else
echo ""
fi
}
# setting propmt
PROMPT="
%{$fg_bold[cyan]%}%n%{$reset_color%}%{$fg_bold[blue]%}@%m%{$reset_color%}:%{${fg_bold[green]}%}%~%{$reset_color%}
%(?:%{$fg_bold[green]%}➜:%{$fg_bold[red]%}➜) %{${reset_color}%}"'$(print_git_prompt)'
RPS1="%(?..%{$fg_bold[red]%} [ %? ]%{$reset_color%}) %D - %*"
プロンプト表示に使うgitバイナリだけmsys2の物に差し替えると上手くいくようになります
具体的には以下のようにしてGit for Windowsと競合しないようにMSYS2のGitを構成しPROMPT='$(msys2_git)'
のように呼び出してやると上手くいきます
pacman -S git
mv /usr/bin/git /usr/bin/msys2_git
Git for Windowsだけでやる場合の方法です
add-zsh-hook precmd
でプロンプトに出したいコマンドを呼び出し、変数の値を書き換えてそれを表示するスタイルでやると上手くいきます