git目录外时,不同的zsh终端提示

时间:2020-09-27 22:12:17

标签: git terminal zsh

有人知道怎么做吗?当我不在git目录中时,我需要/想要正确的提示来显示时间,而当我在git目录中时,我希望它显示分支。

这是我使用的配置extracted from git doc

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'

但是要在git dir之外使用RPROMPT="%*"

1 个答案:

答案 0 :(得分:0)

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

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

一些注意事项:

  • vcs_info调用内置的zsh来设置$vcs_info_msg_0_
  • zstyle ...配置来自vcs_info的结果。
  • psvar[1] psvar数组是一组特殊变量,可以在提示(%1v)中轻松引用。
  • if [[ -z ${psvar[1]} ]]测试是否由vcs_info设置了任何内容;如果结果为零长度,请改用时间。
  • ${(%):-%*}获取时间。有几段内容:(%)表示像提示中那样替换百分比转义符,:-用于创建替换的匿名变量,而%*是设置转义符的提示转义符。时间。
  • add-zsh-hook ...my_precmd添加到precmd挂钩中,因此它将在每个提示之前被调用。比直接设置precmd_functions更好。
  • RPROMPT=%1v设置右侧提示以始终显示psvar[1]的值。