zsh에 프롬프트가 표시될 때마다 프롬프트 표현을 재평가합니다.

zsh에 프롬프트가 표시될 때마다 프롬프트 표현을 재평가합니다.

다음을 기반으로 zsh 프롬프트를 조정하고 있습니다.달라스테마와데이터주제:아 맙소사. 나는 dallas가 프롬프트의 다양한 부분을 변수로 묶어서 무슨 일이 일어나고 있는지 더 쉽게 이해할 수 있다는 점을 좋아합니다.

문제는 이러한 문자열이 평가된다는 것입니다.한 번확장을 위해. 따라서 dstufft와 같은 동적 항목을 사용하려고 하면 ${PWD/#$HOME/~}더 이상 동적으로 업데이트되지 않습니다.

어떻게 하면 두 세계의 장점을 모두 얻을 수 있나요? 프롬프트를 작성할 때마다 평가할 하위 섹션으로 프롬프트를 나누고 싶습니다.

답변1

확실하게 하다prompt_subst옵션열렸습니다. 필요한 경우 다음 줄을 다음 줄에 추가하세요 ~/.zshrc.

setopt prompt_subst

이는 프롬프트가 표시될 때마다 zsh가 프롬프트 문자열을 다시 평가하도록 지시합니다. 그런 다음 필요에 따라 할당하십시오 PS1(또는 테마에서 사용되는 다른 변수를 프롬프트하십시오).

PS1='${PWD/#$HOME/~}'

작은따옴표는 $예를 들어 변수를 설정할 때 특수 문자가 평가되지 않도록 보호합니다.

답변2

zsh에서는 precmd각 프롬프트 전에 무엇이든 할 수 있습니다(예: 변수 설정).

function precmd() {
    current_git_branch=`git rev-parse --abbrev-ref HEAD`
}

http://zsh.sourceforge.net/Doc/Release/Functions.html

이는 원래 질문만큼 현재 디렉토리에 필요하지는 않지만 다른 상황에서 이 문제를 찾는 사람에게는 도움이 될 수 있습니다.

(precmd는 zsh에만 해당됩니다. bash에는 $PROMPT_COMMAND.)

답변3

좋아요,

난 그냥 내 $표지판을 탈출해야합니다. 예를 들어:

${PWD/#$HOME/~}
\${PWD/#\$HOME/~}

답변4

%zsh에서는 이를 위해 이스케이프 문자를 사용해야 합니다 . 예를 들어 ${PWD/#$HOME/~}(귀하의 예에서와 같이) 대신 %~.

읽고 zshall(1)찾아보세요빠르고 쉬운 탈출(여기서 인용이 너무 깁니다).

관련 정보