12

Я пытаюсь исправить небольшую (но раздражающую) проблему с моей подсказкой zsh. Проблема, которую я вижу, состоит в том, что когда я использую терминал в среде ОС с графическим интерфейсом (например, Terminal.app или iTerm 2 в OS X 10.7.2) и изменяю размер окна терминала, терминал перерисовывается с дополнительными подсказками ,

Я воспроизвел проблему на чистом .zshrc, который содержит следующее:

export PROMPT=">
"

Чтобы было ясно, это файл из двух строк. В строке есть буквальный символ новой строки, который я прочитал в нескольких (по общему признанию старых) местах. Это работает до тех пор, пока я не изменю размер окна терминала, после чего я получаю дублирующиеся строки подсказок. Например, если я открываю новое окно, я вижу (* используется заполнитель для моего курсора):

Last login: Wed Jan 25 19:05:06 on ttys000
>
*

Затем, когда я изменяю размер окна, делая его короче, я получаю:

Last login: Wed Jan 25 19:05:06 on ttys000
>
>
>
>
*

Количество дополнительных быстрых распечаток кажется примерно пропорциональным тому, насколько сильно я изменяю размер окна - обычно по вертикали. Если я удалю новую строку из строки приглашения, проблема исчезнет.

Я пробовал разные вещи, такие как $(print ">\n") или пытался перенести новую строку в %{%} . Я предполагаю, что это связано с тем, что символ новой строки сбивает с толку то, что рисует, относительно длины строки запроса или чего-то еще. Исправлена ли эта проблема или мне просто нужно с этим жить?

2 ответа2

10

Эта проблема связана с тем, как ZSH перепечатывает запрос о событиях изменения размера, а также раздражал меня раньше. Решение состоит в том, чтобы сделать $PROMPT однострочным и вывести первую строку приглашения, используя команду precmd.

Так что в вашем примере это будет просто:

precmd() { print ">" }
export PROMPT=""

или для более сложного примера с быстрым расширением в операторе печати используйте параметры -rP :

precmd() { print -rP "%~" }
export PROMPT="%# "

Если у вас зарегистрировано более одного precmd, вам нужно использовать add-zsh-hook precmd (см. man zshcontrib).

9

Как насчет чего-то вроде этого:

NEWLINE=$'\n'
PROMPT="Line1${NEWLINE}LINE2"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .