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()
,以便在命令执行时给出最新状态。
watson_status()
上方使用完全相同的函数,然后导出PS1。当然,在使用“oh my zsh”时,功能是不同的,但我不明白为什么不能像以前那样完成它。 - TycholizPROMPT
但未显示时,将调用watson_status
。请使用单引号(进行必要的调整),就像在bash
中一样。此外,请阅读man zshmisc
中的precmd
钩子,以按需定义您的提示符(类似于bash
中的PROMPT_COMMAND
),这就是Alex所提到的问题所涉及的内容。 - chepner