我正在尝试使用写入命令的时间更新以前的命令提示符。
用我写的代码,输入以下命令
[--:--] costam:~ $ echo "Wrote this at 10:20"
Run Code Online (Sandbox Code Playgroud)
并在五分钟后启动它,结果如下:
[10:25] costam:~ $ echo "Wrote this at 10:20"
Wrote this at 10:20
Run Code Online (Sandbox Code Playgroud)
zsh-theme 中实现此目的的代码如下
PROMPT='[--:--] %{$fg[red]%}$USER:%{$reset_color%}%{$fg[green]%}%c%{$reset_color%}$(git_prompt_info) %(!.#.$) '
preexec () {
DATE=`date +"%H:%M"`
echo -e "\r\033[1A[${DATE}]"
}
Run Code Online (Sandbox Code Playgroud)
问题是当命令超过一行或者有一个激活的虚拟环境时。在这种情况下,提示不会在它应该覆盖的地方被覆盖,结果如下:
# Multiline
[--:--] costam:~ (master) $ cat ~/.oh-my-zsh/custom/themes/davever
[10:20]-theme
# Virtualenv
[10:20]env) [--:--] costam:~ (master) $ echo "Broken"
Broken
Run Code Online (Sandbox Code Playgroud)
我正在考虑的一个解决方案是找到当前提示preexec(),然后[--:--]用当前时间替换,但我不知道如何或什至可能获得当前提示。
欢迎任何其他解决方案,只要时间以相同的方式(或非常相似)打印,而不是,例如,使用RPROMT或在新提示中打印在右侧。
谢谢!
您只需使用即可%T获取提示序列中的当前时间。
%F{<color>}此外,您可以使用and%f来简化提示字符串,而不是将原始转义码放入提示中。
因此,删除该preexec函数并使用它作为提示:
PROMPT='[%T] %F{red}$USER:%F{green}%c%f$(git_prompt_info) %(!.#.$) '
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |