現在の作業ディレクトリの末尾を個別に表示するようにzshプロンプトをカスタマイズします。

現在の作業ディレクトリの末尾を個別に表示するようにzshプロンプトをカスタマイズします。

したがって、現在のプロンプトは次のようになります。
~/path/to/dir %

可能であれば、次のように最上位ディレクトリだけを表示したいと思います。
~/path/to (dir) %

私は近い!私の.zshrcには現在次のものがあります。PROMPT="%~ (%1d) %#"出力:
~/path/to/dir (dir) %

最初のパスから最後のフォルダ "dir"を削除するだけです。どんなアイデアがありますか?

(注:私は尋ねました。スタックオーバーフローに関するこの質問ここにリダイレクトされます。 )

答え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 .

関連情報