zsh:执行时命令旁边的打印时间

zsh:执行时命令旁边的打印时间,zsh,Zsh,我想将zsh配置为将每个命令开始的时间附加到行命令执行的时间。例如: # before I press ENTER $ ./script # after I press enter $ ./script [15:55:58] Running script... 我提出了以下配置(也将时间戳涂成黄色): 但它会在基本命令(如cat和echo)上中断并打印{和%字符。它还会在密码提示(macOS终端)上中断。例如,使用echo: $ echo "hello" [15:55:58] hello"

我想将zsh配置为将每个命令开始的时间附加到行命令执行的时间。例如:

# before I press ENTER
$ ./script

# after I press enter
$ ./script [15:55:58]
Running script...
我提出了以下配置(也将时间戳涂成黄色):

但它会在基本命令(如
cat
echo
)上中断并打印
{
%
字符。它还会在密码提示(macOS终端)上中断。例如,使用
echo

$ echo "hello" [15:55:58] 
hello"hello" %{%}
如何修复此配置?
谢谢。

你启发了我,基于你的脚本,我写了我的。我已经在zsh 5.4.smth上测试过了

preexec () {
  local TIME=`date +"[%H:%M:%S] "`
  local zero='%([BSUbfksu]|([FK]|){*})'
  local PROMPTLEN=${#${(S%%)PROMPT//$~zero/}}
  echo "\033[1A\033[$(($(echo -n $1 | wc -m)+$PROMPTLEN))C $fg[blue]${TIME}$reset_color"
}
preexec () {
  local TIME=`date +"[%H:%M:%S] "`
  local zero='%([BSUbfksu]|([FK]|){*})'
  local PROMPTLEN=${#${(S%%)PROMPT//$~zero/}}
  echo "\033[1A\033[$(($(echo -n $1 | wc -m)+$PROMPTLEN))C $fg[blue]${TIME}$reset_color"
}