在 ZSH 提示符中显示项目根目录的路径

Abd*_*med 5 prompt zsh

如果我的密码是~/repos/blog/app/views/,我只想blog/app/views在提示中显示,即我只想显示项目根目录。项目根目录是目录的父目录.git。有什么方法可以实现这个目标吗?

Gil*_*il' 4

如果设置该prompt_subst选项,您可以执行任意代码来显示提示。您不需要.git在每次显示提示时查找目录:实际上,在每次当前目录更改时更新挂钩中的变量chpwd并在提示中使用该变量就足够了。

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}%# '
Run Code Online (Sandbox Code Playgroud)