Це специфічна особливість zsh(і зараз fishтеж) , щоб чітко бачити неузгоджені рядки у висновку команд.
У традиційних оболонках, якщо команда виводить деякі дані після останнього символу нового рядка, або, іншими словами, якщо вона залишає курсор терміналу не на початку рядка, наступний запит оболонки закінчується доданим до останнього невизначеного рядка а саме:
bash-4.4$ printf XXX
XXXbash-4.4$
Це обманює підказку, і це легко пропустити, XXXособливо якщо у вас є такий любитель підказок. Це також впливає на позиціонування курсору, що спричиняє збої дисплея при переміщенні курсору.
zshобробляє це, показуючи, що на виході є незавершена лінія з %символом у жирному та зворотному відео та видає наступне підказку на початку наступного рядка:
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
Це робить це шляхом виведення , що зворотні відео %в кінці кожної команди (перед кожним рядком), а потім 79 просторів (за умови 80 символів в ширині термінал), в CR характер (той , який змушує курсор , щоб повернутися до першого стовпця) та послідовність для видалення до кінця рядка (а потім підказки).
Таким чином, якщо була неперервана лінія, оскільки курсор знаходиться не на першій позиції, ці 80 символів змусять курсор перейти до наступного рядка (і %він залишиться). Якщо ні, то це %і ці 79 пробілів будуть у одному рядку, який буде видалено згодом.
Тепер це працює лише в тому випадку, якщо термінал обертає лінії (наприклад, це не буде працювати належним чином після tput rmam). Якщо у вас повільний термінал (наприклад, у серійній лінії 9600 бод), ви можете побачити ті, %що відображаються, а потім видаляються після кожної команди, тому zshви можете відключити цю функцію:
unsetopt prompt_cr prompt_sp
Таким чином, zshповодиться більше, як традиційні мушлі.
Ви також можете змінити цю позначку за допомогою $PROMPT_EOL_MARKзмінної.
print -n "this is a test"тодіprint "this is a test"