Як я можу помістити нову рядок у своє запит zsh, не викликаючи проблем із перемальовуванням терміналу?


13

Я намагаюся виправити незначну (але дратівливу) проблему моїм запитом 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")або намагаюся вкрутити новий рядок %{%}. Я припускаю, що це пов’язано з тим, що новий рядок плутає все, що малює wrt, як довго є строковий рядок, або щось таке. Чи можна цю проблему виправити чи мені просто доведеться з нею жити?

Відповіді:


13

Ця проблема пов'язана з тим, як ZSH передруковує запрошення на події розміру, а також раніше мене дратувало. Рішення полягає в тому, щоб зробити $PROMPTоднорядковий і надрукувати перший рядок підказки за допомогою precmd.

Тож у вашому прикладі це було б просто:

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

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

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

Якщо у вас зареєстровано більше одного precmd, вам потрібно скористатися add-zsh-hook precmd(див. man zshcontrib).


1
Для новачків, як я, ви можете побачити, що означає -rP тут: cs.elte.hu/zsh-manual/zsh_17.html . Здається, що printце команда ZSH, і Google "друк Linux" не дає дуже хороших результатів.
MikeWyatt

printє частиною zsh. Довідку про це ви можете побачити в man zshbuiltins. У Bash є власний еквівалент, але я не впевнений, що вони сумісні.
Джим Стюарт

11

Як щодо щось подібне:

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

Мені подобається це рішення краще, ніж прийнята відповідь. він більш портативний, і дозволяє мені підтримувати той самий сценарій між моїми середовищами zsh та bash
verboze
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.