ZSH RPROMPT奇怪的间距?

时间:2012-12-27 05:38:09

标签: macos command-prompt zsh 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'

看起来像

  

this

当我将$(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)'

看起来像

  

enter image description here

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:11)

我相信$fg[color]包含\e[32m之类的内容?如果是,则必须将其括在%{…%}中以指示此序列没有宽度。但更好的是,如果你忘记了整个事情,并使用%F{color}作为前景,%K{color}作为背景,%f / %k取消它们代替$reset_color 。你必须

setopt promptsubst
setopt promptpercent

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

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