小编Cos*_*taM的帖子

Zsh 随时间更新提示

我正在尝试使用写入命令的时间更新以前的命令提示符。

用我写的代码,输入以下命令

[--:--] 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或在新提示中打印在右侧。

谢谢!

zsh

6
推荐指数
1
解决办法
177
查看次数

标签 统计

zsh ×1