Pracując z gitem, często zapominamy na jakiej aktualnie gałęzi (brancha) się znajdujemy, zaś wpisywanie git branch jest po prostu meczące. Oczywiście możemy to obejść jakimś dwuliterowym, zgrabnym aliasem (tutaj artykuł o nich), jednak wygodniej skorzystać z dobrodziejstwa zsh i otrzymać bezpośrednio i automatycznie ładną informację o tym w jakiej gałęzi się znajdujemy, oraz o tym czy nastąpiły jakieś niezatwierdzone zmiany.
################# git prompt ####################### based on: http://kriener.org/articles/2009/06/04/zsh-prompt-magic
setopt prompt_subst
autoload colors
colors
autoload -Uz vcs_info
# set some colorsfor COLOR in RED GREEN YELLOW WHITE BLACK CYAN;doeval PR_$COLOR='%{$fg[${(L)COLOR}]%}'eval PR_BRIGHT_$COLOR='%{$fg_bold[${(L)COLOR}]%}'donePR_RESET="%{${reset_color}%}";# set formats# %b - branchname# %u - unstagedstr (see below)# %c - stangedstr (see below)# %a - action (e.g. rebase-i)# %R - repository path# %S - path in the repositoryFMT_BRANCH="${PR_GREEN}%s::%b%u%c${PR_RESET}"# e.g. master¹²FMT_ACTION="(${PR_CYAN}%a${PR_RESET}%)"# e.g. (rebase-i)FMT_PATH="%R${PR_YELLOW}/%S"# e.g. ~/repo/subdir# check-for-changes can be really slow.# you should disable it, if you work with large repositories
zstyle ':vcs_info:*:prompt:*' check-for-changes true
zstyle ':vcs_info:*:prompt:*' unstagedstr '¹'# display ¹ if there are unstaged changes
zstyle ':vcs_info:*:prompt:*' stagedstr '²'# display ² if there are staged changes
zstyle ':vcs_info:*:prompt:*' actionformats "${FMT_BRANCH}${FMT_ACTION}//""${FMT_PATH}"
zstyle ':vcs_info:*:prompt:*' formats "${FMT_BRANCH}""${FMT_PATH}"
zstyle ':vcs_info:*:prompt:*' nvcsformats """%~"function precmd {
vcs_info 'prompt'}function rprompt {localbrackets=$1localcolor1=$2localcolor2=$3localbracket_open="${color1}${brackets[1]}${PR_RESET}"localbracket_close="${color1}${brackets[2]}${PR_RESET}"localcolon="${color1}:"localat="${color1}@${PR_RESET}"localuser_host="${color2}%n${at}${color2}%m"localvcs_cwd='${${vcs_info_msg_1_%%.}/$HOME/~}'localcwd="${color2}%B%20<..<${vcs_cwd}%<<%b"localinner=""localgit='$vcs_info_msg_0_'RPROMPT="${PR_RESET}${bracket_open}${inner}${git}${bracket_close}${PR_RESET}"}
rprompt ' '$BR_BRIGHT_BLACK$PR_WHITE