ZSH RPROMPT странный интервал?

Вот моя подсказка 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)'

это выглядит как

Видите расстояние справа? Также стрелка начинается не в том месте?

Как я могу это исправить?

1 ответ

Я верю $fg[color] содержит что-то вроде \e[32m? Если так, это должно быть включено в %{…%} чтобы указать, что эта последовательность не имеет ширины. Но гораздо лучше, если вы забудете обо всем этом и используете %F{color} для переднего плана, %K{color} для фона и %f/%k отменить их вместо $reset_color, Ты должен сделать

setopt promptsubst
setopt promptpercent

для того, чтобы это работало (у вас, вероятно, уже есть это).

Этот промежуток - это ширина цветов, и они являются причиной, по которой у вас неправильная позиция курсора. Проблема здесь в том, что zsh не может запросить терминал с вопросом "Эй, я вывел некоторый текст, какова его ширина?" Вместо того, чтобы вычислять ширину самостоятельно.

Другие вопросы по тегам