在git目录之外时出现不同的zsh终端提示

在git目录之外时出现不同的zsh终端提示,git,terminal,zsh,Git,Terminal,Zsh,有人知道怎么做吗?当我在git目录外时,我需要/希望我的右提示符显示时间,当我在git目录内时,我希望它显示分支 这是我使用的配置: 但是当在git目录之外时,您想使用RPROMPT=“%*”。一种方法是将所有内容放入您自己的precmd函数中。下面是一个示例(将其添加到~/.zshrc): 一些注意事项: vcs\u info调用zsh内置项设置$vcs\u info\u msg\u 0 zstyle…配置来自vcs\u信息的结果 psvar[1]psvar数组是一组特殊变量,可以在提示符中

有人知道怎么做吗?当我在git目录外时,我需要/希望我的右提示符显示时间,当我在git目录内时,我希望它显示分支

这是我使用的配置:


但是当在git目录之外时,您想使用
RPROMPT=“%*”

一种方法是将所有内容放入您自己的precmd函数中。下面是一个示例(将其添加到
~/.zshrc
):

一些注意事项:

  • vcs\u info
    调用zsh内置项设置
    $vcs\u info\u msg\u 0
  • zstyle…
    配置来自
    vcs\u信息的结果
  • psvar[1]
    psvar
    数组是一组特殊变量,可以在提示符中轻松引用(
    %1v
  • if[[-z${psvar[1]}]
    测试是否有任何内容是由
    vcs_info
    设置的;如果结果为零长度,则使用时间
  • ${(%):-%*}
    获取时间。有几部分:
    (%)
    表示替换百分比转义,就像在提示符中一样,
    :-
    用于为替换创建匿名变量,
    %*
    是设置时间的提示符转义
  • addzsh hook…
    my_precmd
    添加到precmd hook,因此在每次提示之前都会调用它。这比直接设置
    precmd_函数
    更可取
  • RPROMPT=%1v
    将右侧提示设置为始终显示
    psvar[1]
    的值

感谢您的详细解释。但它不起作用:(我应该要求您澄清“git目录”。请尝试更新的版本;它现在使用
vcs\u info
设置的变量来确定要使用哪个提示符。@FrVentura-除了“它不起作用”之外,您还有其他信息吗?如果有更多详细信息,我们可以确定为什么这在我的系统上有效,但在您的系统上无效。
autoload -Uz vcs_info
precmd_vcs_info() { vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst
RPROMPT=\$vcs_info_msg_0_
zstyle ':vcs_info:git:*' formats '%b'
my_precmd() {
  vcs_info
  psvar[1]=$vcs_info_msg_0_
  if [[ -z ${psvar[1]} ]]; then
    psvar[1]=${(%):-%*}
  fi
}

autoload -Uz vcs_info
zstyle ':vcs_info:git:*' formats '%b'
autoload -Uz add-zsh-hook
add-zsh-hook precmd my_precmd
RPROMPT=%1v