Це специфічна особливість 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"