作者:手机用户2502931183 | 来源:互联网 | 2023-06-29 14:43
TLDR;
我需要一种方法,使.zshrc
每次执行命令时都自动获得。每次执行命令时都需要更新PROMPT
,以便在提示中显示相关信息。
原因
我使用Watson cli来跟踪时间。在之前的bash设置中,我在提示符($PS1
之前添加了一个符号,该符号指示计时器是否正在运行(红色/绿色)。我已经用Oh My Zsh模仿了此功能,如下所示(在主题文件中):
WAtsoN_DIR="$HOME/library/Application Support/watson"
watson_status() {
local txtred="${fg_bold[red]}"
local txtgrn="${fg_bold[green]}"
local txtrst="${reset_color}"
# Started
local status_color="$txtgrn"
# Stopped
if [[ $(cat "$WAtsoN_DIR/state") == '{}' ]]; then
status_color="$txtred"
fi
echo -e "$status_color""◉""$txtrst"
}
PROMPT="╭── %{$(watson_status) $fg_bold[green]%}%~%{$reset_color%}$(git_prompt_info) ⌚ %{$FG[130]%}%*%{$reset_color%}
╰─➤ $ "
当前问题
该图标将指示执行.zshrc时状态的颜色。例如,如果计时器正在运行并且图标正确显示为绿色,则停止计时器不会导致图标变为红色。为了看到图标更改颜色,我必须来源.zshrc。
这表明函数watson_status()
每次执行命令时都需要运行,以在命令执行时提供最新状态
我最近在OSX Big Sur上将一些提示代码从bash移植到了zsh,这对我来说是两个重要的“知识”
- 将
start program > log
...
kill $pid
start program > log
添加到您的.zshrc中。这“允许提示中的功能”
- 在定义PS1 / PROMPT时使用单引号。如果使用双引号,则在终端启动时将对整个字符串进行一次评估,然后每次命令更改时都会“重新执行”该评估值。但是您希望重新评估功能,而不是重新创建终端时功能的输出。
最简单的例子,我曾经确认它可以正常工作:
setopt PROMPT_SUBST
还值得注意的是PS1和PROMPT是可互换的
其他:
虽然我们在这里共享的是我的用户,目录和git分支PROMPT的回声相当小,但带有一些颜色和漂亮的叶子:
# print_epoch() { date '+%s' }
# this is what you want
# export PS1='$(print_epoch) > '
# this is not what you want
# export PS1="$(print_epoch) > "
注意:
- %n 打印名称
- %〜打印相对于主目录的目录
- %F {blue} 将文本更改为蓝色
- %f 重设颜色
文档:http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects