这是我的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)'
看起来像
看右边的间距?箭头也从错误的地方开始?
我该如何解决这个问题?
答案 0 :(得分:11)
我相信$fg[color]
包含\e[32m
之类的内容?如果是,则必须将其括在%{…%}
中以指示此序列没有宽度。但更好的是,如果你忘记了整个事情,并使用%F{color}
作为前景,%K{color}
作为背景,%f
/ %k
取消它们代替$reset_color
。你必须
setopt promptsubst
setopt promptpercent
为了使这个工作(你可能已经有了这个)。
这个间隙是颜色的宽度,它们是你错误的光标位置的原因。这里的问题是,zsh无法查询终端,问题是“嘿,我输出了一些文字,它的宽度是多少?”而是必须自己计算宽度。