zsh에서 RPROMPT를 모든 입력에서 자동으로 업데이트하는 방법은 무엇입니까?

zsh에서 RPROMPT를 모든 입력에서 자동으로 업데이트하는 방법은 무엇입니까?

RPROMPT것은 svn 정보를 표시하는 데 사용하도록 설정되었습니다 vcs_info. 그것은 말한다 RPROMPT=${vcs_info_msg_0_}. vcs_info을 사용하여 호출됩니다 precmd(). 그러나 디렉터리를 변경하면 RPROMPT가 업데이트되지 않습니다. 프롬프트를 다시 호출할 때만 작동하며(소스 ~/.zshrc 또는 Prompt를 통해) 프롬프트를 다시 호출하지 않는 한 chdir에서는 변경되지 않습니다. 이 동작을 바꿀 수 있는 방법이 있나요?

답변1

지연 평가를 할당할 때 변수 값을 작은따옴표로 묶어보세요.

RPROMPT='${vcs_info_msg_0_}'

답변2

동적 별칭을 정의할 때 작은따옴표를 사용하여 평가를 지연하는 것도 가능합니다. 다음은 기존 SSH 에이전트 프로세스에 새 쉘을 연결하기 위한 별칭입니다 . 이 프로세스는 homedir의 파일에 쉘 코드를 작성하는 t별칭으로 시작됩니다 .ssh-start

mymistress:~> which ssh-start
ssh-start: aliased to eval `ssh-agent | tee ~/.ssh/ssh-agent.out` ; ssh-add ~/.ssh/id_rsa
mymistress:~> grep "alias t" .zshrc    
alias t="eval `cat ~/.ssh/ssh-agent.out`"
mymistress:~> which t
t: aliased to eval SSH_AUTH_SOCK=/tmp/ssh-nZBZp29804/agent.29804; export SSH_AUTH_SOCK;\nSSH_AGENT_PID=29805; export SSH_AGENT_PID;\necho Agent pid 29805;`

이 정의는 t새 실행에 대한 새 정보가 ssh-start무시되기 때문에 좋지 않습니다. 내 .zshrc에서 별칭 정의를 t작은따옴표로 변경하면 더 나은 동작이 제공됩니다.

mymistress:~> grep "alias t" .zshrc
alias t='eval `cat ~/.ssh/ssh-agent.out`'
mymistress:~> source ~/.zshrc
mymistress:~> which t
t: aliased to eval `cat ~/.ssh/ssh-agent.out`

t제공된 정의의 확장에 주목하세요 which t. 큰따옴표(명령 또는 환경 변수의 즉각적인 내부 확장)와 작은따옴표(명령 및 변수의 지연 평가)의 효과를 보여줍니다.

관련 정보