9

这是我的 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'

看起来像

这个

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

看起来像

在此处输入图像描述

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

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

4

1 回答 1

13

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

setopt promptsubst
setopt promptpercent

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

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

于 2012-12-27T18:17:32.497 回答