我RPROMPT
设置为使用显示svn信息vcs_info
。它读RPROMPT=${vcs_info_msg_0_}
。vcs_info
被称为使用precmd()
。但是,当我更改目录时,RPROMPT不会更新。仅当我再次调用提示符(通过源〜/ .zshrc或提示符)并且在chdir上不变时,它才起作用,除非再次调用提示符。有什么办法可以改变这种行为?
我RPROMPT
设置为使用显示svn信息vcs_info
。它读RPROMPT=${vcs_info_msg_0_}
。vcs_info
被称为使用precmd()
。但是,当我更改目录时,RPROMPT不会更新。仅当我再次调用提示符(通过源〜/ .zshrc或提示符)并且在chdir上不变时,它才起作用,除非再次调用提示符。有什么办法可以改变这种行为?
Answers:
尝试在赋值时将单引号引起来以延迟评估:
RPROMPT='${vcs_info_msg_0_}'
setopt PROMPT_SUBST
在文件中更早发生。否则,它将按字面意义回显提示。
使用单引号延迟评估也可以用于定义动态别名。这是一个别名,t
用于将新shell附加到现有的ssh代理进程,该别名以名为的别名开始,该别名ssh-start
将shell代码写到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
被忽略。将.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
,显示双引号的效果(立即就地扩张命令或环境变量)与单引号(命令和变量的延迟评价)。