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.

관련 정보