ZSH RPROMPT 出现奇怪的间距?

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

看起来像这样:

enter image description here

右边的间距有问题,箭头起始位置也不对吗?

我该如何修复这个问题?


2
嘿,你能分享一下那个配色方案吗?我知道这个帖子有点老了,但是也许你还有它 =/ - roboslone
1个回答

13

我相信$fg[color]包含类似于\e[32m的内容?如果是这样,那么它必须被包含在%{…%}中,以表明该序列没有宽度。但是如果您忘记整个过程并使用%F{color}用于前景,%K{color}用于背景,%f/%k用于取消它们,代替$reset_color,那将更好。您必须执行

setopt promptsubst
setopt promptpercent
为了使这个工作正常(你可能已经拥有这个)。
这个间隙是颜色的宽度,这就是你光标位置出错的原因。问题在于zsh无法通过问题“嘿,我输出了一些文本,它的宽度是多少?”来查询终端,而是必须自己计算宽度。

现在我的文件看起来像这样 http://pastebin.com/icU1e62D它看起来像这样 http://f.cl.ly/items/3i3l2V3k3d1d1I321I1s/Screen%20Shot%202012-12-28%20at%201.26.36%20AM.png我尝试添加setopt promptsubst setopt promptpercent但它没有起作用。 - ahmedelgabri
@Gabri,如果它不起作用,你就看不到这个(第一个允许扩展$(),第二个使%{工作)。我在你展示的内容中没有发现任何问题。 - ZyX
选项自动补全功能无法正常工作,我多了一个空格。如果你点击退格键删除所写的内容,最后一个字母仍然是可见的。请查看这个链接:http://cl.ly/3v1U2k1b2f3h。 - ahmedelgabri
@Gabri 我现在明白了。正如我所说的,%{…%}表示文本没有宽度。这个规则在 *_DIRTY 变量中被违反了。 - ZyX
谢谢,这也解决了我的问题。我必须使用${...$},因为我想要256种颜色,而不是具有名称别名的16种颜色。 - Sridhar Sarnobat
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接