Нажатие на вкладку в Zsh съедает строки выше

Я только что переключился на Zsh, но столкнулся со странной проблемой: каждый раз, когда я нажимаю клавишу табуляции, подсказка поднимается на строку вверх, таким образом съедая то, что было выше.

Чтобы более наглядно продемонстрировать проблему, я создал GIF:

введите здесь описание изображения

Я использую пользовательскую тему и Oh My Zsh. Вы можете найти тему здесь: http://pastebin.com/12dZtZf3.

РЕДАКТИРОВАТЬ: Проблема, похоже, связана с моей темой, так как использование других тем решает проблему.

РЕДАКТИРОВАТЬ: проблема, по-видимому, в функции, которая печатает строку тире и дату над подсказкой:

_professional_prompt_header() {
  echo -n "$bg[grey]"

  for i in {0..$(( $(tput cols) / 2 - 6 ))}; do
    echo -n "--"
  done

  # Uncommenting this line fixes the problem.
  # Tried echo without -n and print, but no success.
  echo -n " %*$reset_color"      
}

person jviotti    schedule 08.05.2014    source источник
comment
Что-то в завершении вашей вкладки генерирует escape-последовательность, которая каким-то образом заставляет терминал перерисовывать экран при удалении 3-й (?) Строки над текущей позицией курсора. Я не могу представить себе опечатку, которая могла бы иметь такой эффект, но я бы сказал, что настройка автодополнения табуляции — это то, с чего стоит начать.   -  person chepner    schedule 08.05.2014
comment
@chepner Я полагаюсь на плагины Oh My Zsh для всего поведения: у меня активированы следующие плагины: plugins=(git nvm colorize cp colored-man sublime extract z). Как ни странно, смена моей темы решает проблему.   -  person jviotti    schedule 08.05.2014
comment
Вероятно, что-то в вашей подсказке портит отображение терминала. Установите подсказку на что-то тривиальное и повторите попытку. Держу пари, все будет работать так, как ожидалось.   -  person Francisco    schedule 09.05.2014
comment
Очень вероятно, что вы где-то разместили escape-коды без скобок %{...%}, вероятно, в определении цветов. Так что вместо этого, например. PS1=$'\e[31mBeautiful prompt>\e[0m' у вас должно быть PS1=$'%{\e[31m%}Beautiful prompt>%{\e[0m%}'   -  person    schedule 11.05.2014


Ответы (1)


Это также стало проблемой с многострочными подсказками в выпуске zsh 5.3. По состоянию на 13 января 2017 г. патч не выпущен. Обсуждение и объяснение можно найти в этой проблеме prezto.

Более подробное обсуждение проблем с zsh можно найти здесь.

Надеюсь, в проекте zsh появится исправление. Если нет, некоторые обходные пути, упомянутые в этом репозитории github, заключаются в том, чтобы сделать вашу переменную PROMPT только одной строкой, выводя любые другие строки в функции precmd. Однако это кажется болезненным, поэтому, пока это не будет исправлено (или не решено стать «функцией»), самое простое исправление звучит так, как будто это откат к zsh 5.2.

person user1978019    schedule 14.01.2017
comment
Согласно этому комментарию от 27 февраля, эта проблема будет решена. в (по состоянию на 10 мая 2017 г. еще не выпущенной) версии 5.3.2. Согласно приведенному выше комментарию, исправление уже доступно на зеркале zsh git. - person Wojciech Morawiec; 10.05.2017
comment
Все еще наблюдается вариант проблемы с zsh 5.4.2 по состоянию на 19 ноября 2017 г. - person Marco; 20.11.2017
comment
@ Марко, я тоже был. В моем случае проблема возникает именно тогда, когда первая строка подсказки (моя подсказка двухстрочная) полностью заполняет ширину терминала; Я изменил свое приглашение, чтобы сжать cwd, чтобы оно достигало на единицу меньше, чем конец строки, и оно перестало потреблять строки. - person sarahzrf; 07.12.2017