Você pode executar código arbitrário para exibir o prompt se definir as prompt_subst
opção. Você não precisa procurar o diretório .git
toda vez que um prompt é exibido: na prática, é suficiente atualizar uma variável em cada mudança de diretório atual, no chpwd
anexe e use essa variável no seu prompt.
setopt prompt_subst
chpwd () {
git_root=$PWD
while [[ $git_root != / && ! -e $git_root/.git ]]; do
git_root=$git_root:h
done
if [[ $git_root = / ]]; then
unset git_root
prompt_short_dir=%~
else
prompt_short_dir=${PWD#$git_root/}
fi
}
chpwd
PS1='${prompt_short_dir}%# '