현재 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
include는 내부 인용문이 확장되지 않도록 $(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가 이를 방해할지 여부는 알 수 없습니다.