我知道我可以在zsh提示符中执行date
命令。
但是,它显示旧时间;要查看当前时间,我必须点击<return>
并获得当前时间的新提示。
有没有办法配置zsh提示每秒不断更新自己?
答案 0 :(得分:36)
注意:我为a similar question写了这个答案,但是看看这个问题如何有更多的观点,我认为在这里重新发布我的答案会很有用。
事实上,这可能不会诉诸奇怪的黑客。我的.zshrc
中有这个RPROMPT='[%D{%L:%M:%S %p}]'
TMOUT=1
TRAPALRM() {
zle reset-prompt
}
每个TMOUT秒调用TRAPALRM函数(在本例中为1),此处它执行提示刷新,并执行此操作直到命令开始执行(并且它不会干扰您在命中之前在提示符上键入的任何内容输入)。
资料来源:http://www.zsh.org/mla/users/2007/msg00944.html(这是2007年!)
答案 1 :(得分:8)
这在标准的zsh提示符(或bash或其他shell)中会令人不快。
我建议你最好使用Gnu Screen。
屏幕可以有一个可以显示时间的状态行。 Here's an example screenrc向下滚动到“红帽杂志GNU屏幕指南”以查看示例(我将在此重现),当屏幕运行时,将显示终端右下角的当前时间:
〜/ .screenrc
hardstatus alwayslastline hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]' # Default screens screen -t shell1 0 screen -t shell2 1
答案 2 :(得分:6)
对我来说听起来很愉快。如果有什么比显示提示显示的时间更有意义。
幸运的是Peter Stephenson posted a technique。在.zshrc中尝试这样的事情:
PROMPT="[%T] %n@%M %~ %# "
schedprompt() {
emulate -L zsh
zmodload -i zsh/sched
# Remove existing event, so that multiple calls to
# "schedprompt" work OK. (You could put one in precmd to push
# the timer 30 seconds into the future, for example.)
integer i=${"${(@)zsh_scheduled_events#*:*:}"[(I)schedprompt]}
(( i )) && sched -$i
# Test that zle is running before calling the widget (recommended
# to avoid error messages).
# Otherwise it updates on entry to zle, so there's no loss.
zle && zle reset-prompt
# This ensures we're not too far off the start of the minute
sched +30 schedprompt
}
schedprompt