热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

每次执行命令时使zsh提示更新

TLDR;我需要一种方法,使.zshrc每次执行命令时都自动获得。每

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


推荐阅读
author-avatar
手机用户2502931183
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有