私は現在、pyenv設定をプロンプトに追加するために、oh-my-zshでintika2テーマを修正しています。 OMZには、これを行うためにintika2テーマのLEFTINFOS変数に追加したpyenv_prompt_infoコマンドが含まれています。これにより、.zshrcファイルをインポートするたびに正しいpyenvバージョンが提供されますが、pyenvバージョンを変更した後の後続のプロンプトは正しいpyenvバージョンを提供しません。
提案されたテーマ修正の最小バージョン:
function prompt_char {
if [ $UID -eq 0 ]; then echo "#"; else echo $; fi
}
LEFTINFOS="$FG[gray][pyenv=$(pyenv_prompt_info)] [%~] %{$reset_color%}"
PROMPT='
╭─$LEFTINFOS
╰─$(prompt_char)%{$reset_color%} '
LEFTINFOSは私が追加したものではなく、intika2テーマで定義されています。
私がPROMPT
次に変更した場合
PROMPT='
╭─$FG[gray][pyenv=$(pyenv_prompt_info)] [%~] %{$reset_color%}
╰─$(prompt_char)%{$reset_color%} '
Prompt_substが設定されていることを確認しました。LEFTINFOS
たとえば、定義に対してさまざまな調整を試みましたが、%{$(pyenve_prompt_info%)
成功しませんでした。私は見たことがないこれに
修理(つまり交換LEFTINFOS
)が簡単です。理由を理解したいです。コマンド置換は機能しません。
ベストアンサー1
あなたの見積もりが間違っています。定義ではLEFTINFOS
二重引用符が使用されるため、引用符内の内容はプロンプトが評価されるのではなく、定義が評価されたときに評価されます。PROMPT
文字列を含むように値をソートする必要があります$(pyenv_prompt_info)
。したがって、LEFTINFOS
インクルードは、内部引用符が拡張されないように$(pyenv_prompt_info)
単一引用符を使用して定義されます。$…
代わりに、値には文字列以外のPROMPT
値を含める必要があります。それ以外の場合、プロンプトに結果は展開されずに含まれます。したがって、定義時に二重引用符を使用してください。LEFTINFOS
$LEFTINFOS
$(pyenv_prompt_info)
他の変数の場合は重要ではありませんが、セッション中に色を調整できるようにするには、以前ではなくプロンプトの計算中にも拡張する必要があります。
LEFTINFOS='$FG[gray][pyenv=$(pyenv_prompt_info)] [%~] %{$reset_color%}'
PROMPT="
╭─$LEFTINFOS
╰─$(prompt_char)%{$reset_color%} "
また、ここに示すように、$(prompt_char)
これは奇妙で遅い作成方法で%(!:#:\$)
あり%(!…)
、有効なUIDを使用することに加えて、ルートシェルから一時的に権限を削除する場合にのみ重要です。
使用psvar
そして%1v
、、、%2v
…プロンプト定義を読みやすくするのは簡単ですが、oh-my-zshがそれを妨げるかどうかはわかりません。