Как я могу поместить новую строку в приглашение 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, как долго строка приглашения на самом деле, или что-то. Эту проблему можно решить или мне просто жить с ней?
2 ответов
эта проблема связана с тем, как ZSH перепечатывает promt при изменении размера событий, а также раздражал меня раньше. Решение сделать $PROMPT
однострочный и вывести первую строку приглашения с помощью precmd.
так что в вашем примере, это просто:
precmd() { print ">" }
export PROMPT=""
или для более сложного примера с быстрым расширением в операторе печати используйте -rP
параметры:
precmd() { print -rP "%~" }
export PROMPT="%# "
если у вас зарегистрировано более одного precmd, используйте add-zsh-hook precmd
(см.man zshcontrib
).
Как насчет такого:
NEWLINE=$'\n'
PROMPT="Line1${NEWLINE}LINE2"
Другие вопросы command-line osx-snow-leopard prompt zsh