自定义 zsh 提示符以单独显示当前工作目录的尾部

自定义 zsh 提示符以单独显示当前工作目录的尾部

所以我当前的提示如下所示:
~/path/to/dir %

如果可能的话,我希望它单独显示最顶层的目录,如下所示:
~/path/to (dir) %

我已经接近了!在我的 .zshrc 中,我当前有:PROMPT="%~ (%1d) %#"输出:
~/path/to/dir (dir) %

我只需要从第一个路径中删除最后一个文件夹“dir”。有任何想法吗?

(注:我问Stack Overflow 中的这个问题并被重定向到这里。)

答案1

您可以说“最后一个组件”和%1d“第一个组件”,%-1d但无法说“除了最后一个组件之外的所有组件”。

您可以使用变量扩展而不是提示转义序列。

setopt prompt_subst
PROMPT='${${PWD//#$HOME/~}%/*} (%1d) %#'

您可能需要针对根目录和紧接其下的目录以及主目录和紧接其下的目录进行调整。

或者,您可以在每次目录更改时重新计算这部分提示。对于您的情况,这可能很有用,也可能有点过分,具体取决于您想要自定义特殊情况的程度。

setopt prompt_subst
PROMPT='$psvar[1] %#'
chpwd_prompt () {
  local HPWD=${(%)${:-%~}} # $PWD with ~ abbreviations
  case $HPWD in
    *?/*) psvar[1]="${HPWD%/*} (${HPWD##*/})";;
    *) psvar[1]="($HPWD)";;
  esac
}
chpwd_functions+=(chpwd_prompt)
# Trigger the chpwd hooks once
cd .

相关内容