Как я могу поместить новую строку в приглашение zsh, не вызывая проблем с перерисовкой терминала?

Я пытаюсь исправить незначительную (но раздражающую) проблему с моей подсказкой zsh. Проблема, которую я вижу, заключается в том, что когда я использую терминал в среде GUI OS (например, Terminal.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"), или попытка обернуть новую строку в %{%}. Я предполагаю, что это связано с тем, что новая линия путает то, что рисует w.r.t, как долго строка приглашения на самом деле, или что-то. Эту проблему можно решить или мне просто жить с ней?

5
задан Josh
источник

2 ответов

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

так что в вашем примере, это просто:

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

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

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

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

9
отвечен K-os 2012-03-01 14:57:03
источник

Как насчет такого:

NEWLINE=$'\n'
PROMPT="Line1${NEWLINE}LINE2"
9
отвечен Đức Thanh Nguyễn 2015-10-14 22:19:02
источник

Другие вопросы command-line osx-snow-leopard prompt zsh