PROMPT_SUBSTを使用せずに$ psvarのプロンプトディレクティブを処理します。

PROMPT_SUBSTを使用せずに$ psvarのプロンプトディレクティブを処理します。

私はプロンプトでprecmd色付きの状態を生成するために使用します。git

。に似た文字列を作成して%F{green}master%f%F{red}%f.に割り当てます$psvar[1]

私のヒントには%1vテキスト表示が含まれています。

ただし、緑と赤のテキストではなく、割り当てられたリテラル値が表示されます。

zsh内容を解析する方法はありますか$psvar

答え1

ヒント拡張は再帰的ではありません。プロンプトには存在するので、%1vコンテンツは$psvar[1]プロンプトに挿入されます。

にプロンプ​​ト拡張ディレクティブを入れないでください。$psvar代わりにプロンプ​​トの内容を入れてください。色を変更するには、ターミナルエスケープシーケンスを挿入してください。あなたはそれを使用することができますcolorsそのような理由で。

autoload -U colors
colors
… {
  psvar[1]="$fg[green]$branch$fg[default]"
}

答え2

このzsh-usersメーリングリストの投稿説明する:

%-expandosの結果は再び拡張されないため、挿入された内容は%v最終プロンプトに文字通り表示されます。

だから唯一の方法はset -o prompt_subst

関連情報