ZSH RPROMPT奇怪的间距?

ahm*_*bri 9 macos zsh command-prompt iterm zshrc

这是我的ZSH提示主题

function git_prompt_info() {
  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
  echo "$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_PREFIX$(current_branch)$ZSH_THEME_GIT_PROMPT_SUFFIX"
}

PROMPT='$fg[yellow]%}?? $fg[cyan]%~ $(git_prompt_info)
%{$reset_color%}? '

ZSH_THEME_GIT_PROMPT_PREFIX="[git:"
ZSH_THEME_GIT_PROMPT_SUFFIX="]$reset_color"
ZSH_THEME_GIT_PROMPT_DIRTY="$fg[red]+"
ZSH_THEME_GIT_PROMPT_CLEAN="$fg[green]"

RPROMPT='%T'
Run Code Online (Sandbox Code Playgroud)

看起来像

这个

当我移动$(git_prompt_info)RPROMPT

function git_prompt_info() {
  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
  echo "$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_PREFIX$(current_branch)$ZSH_THEME_GIT_PROMPT_SUFFIX"
}

PROMPT='%T $fg[yellow]%}?? $fg[cyan]%~
%{$reset_color%}? '

ZSH_THEME_GIT_PROMPT_PREFIX="[git:"
ZSH_THEME_GIT_PROMPT_SUFFIX="]$reset_color"
ZSH_THEME_GIT_PROMPT_DIRTY="$fg[red]+"
ZSH_THEME_GIT_PROMPT_CLEAN="$fg[green]"

RPROMPT='$(git_prompt_info)'
Run Code Online (Sandbox Code Playgroud)

看起来像

在此输入图像描述

看右边的间距?箭头也在错误的地方开始?

我怎样才能解决这个问题?

ZyX*_*ZyX 11

我相信$fg[color]包含的东西\e[32m?如果是这样,必须将其括起来%{…%}表示此序列没有宽度.但是如果你忘记了整个事情并使用%F{color}前景,%K{color}背景和%f/ %k取代它们,那就更好了$reset_color.你必须这样做

setopt promptsubst
setopt promptpercent
Run Code Online (Sandbox Code Playgroud)

为了使这个工作(你可能已经有了这个).

这个差距是颜色的宽度,它们是你错误的光标位置的原因.这里的问题是zsh无法查询终端,问题是"嘿,我输出了一些文字,它的宽度是多少?"而是必须自己计算宽度.