zsh의 RPROMPT를 입력 할 때마다 어떻게 업데이트합니까?


11

My RPROMPT는를 사용하여 svn 정보를 표시하도록 설정되어 있습니다 vcs_info. 읽습니다 RPROMPT=${vcs_info_msg_0_}. vcs_info를 사용하여 호출됩니다 precmd(). 그러나 디렉토리를 변경할 때 RPROMPT는 업데이트되지 않습니다. 프롬프트를 다시 호출하는 경우 (source ~ / .zshrc 또는 prompt 중 하나) 만 작동하며 프롬프트를 다시 호출하지 않는 한 chdir에서 변경되지 않습니다. 이 행동을 바꿀 방법이 있습니까?

답변:


20

할당을 평가할 때 변수 값을 작은 따옴표로 묶어 평가를 지연 시키십시오.

RPROMPT='${vcs_info_msg_0_}'

확인 표시가 마이그레이션 될 때 왜 사라 집니까?

@ user5383 : meta.unix.stackexchange.com 또는 meta.stackoverflow.com에서 요청해야합니다. 나는 그 대답을 모른다 (또는 모호하게 만).
추후 공지가있을 때까지 일시 중지되었습니다.

3
이를 위해서는 setopt PROMPT_SUBST파일에서 이전에 발생 해야 합니다. 그렇지 않으면 문자 그대로 프롬프트가 표시됩니다.
Nick Meharry

1

작은 따옴표를 사용하여 평가를 지연 시키면 동적 별명도 정의 할 수 있습니다. 다음 t은 기존 ssh 에이전트 프로세스에 새 쉘을 첨부하는 데 사용되는 별명입니다.이 별명 ssh-start은 homedir의 파일에 쉘 코드를 작성 하는 별명으로 시작되었습니다 .

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가 무시 되도록하기 때문에 그 정의 는 좋지 않습니다 . t내 .zshrc에서 별명 으로 인용되도록 별칭 정의를 변경 하면 훨씬 더 나은 동작을 제공합니다.

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큰 따옴표 (명령 또는 환경 변수의 즉각적인 내부 확장) 대 작은 따옴표 (명령 및 변수의 평가 지연)의 영향을 보여줍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.