Jest to specyficzna cecha zsh
(i teraz fish
także), abyś mógł wyraźnie zobaczyć niezakończone linie w danych wyjściowych polecenia.
W tradycyjnych powłokach, jeśli polecenie wyświetla jakieś dane po ostatnim znaku nowego wiersza lub, innymi słowy, jeśli pozostawia kursor końcowy poza początkiem wiersza, następne zapytanie powłoki jest dopisywane do tego ostatniego niezakończonego wiersza jak w:
bash-4.4$ printf XXX
XXXbash-4.4$
To zniekształca podpowiedź i łatwo ją przeoczyć, XXX
szczególnie jeśli masz bardziej fantazyjne podpowiedzi. Wpływa również na położenie kursora, co powoduje usterki wyświetlacza podczas przesuwania kursora.
zsh
działa w ten sposób, pokazując, że wyjście ma nieskończoną linię ze %
znakiem pogrubionym i odwróconym wideo, i wydaje następny monit na początku następnego wiersza:
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
Robi to, wysyłając odwrócone wideo %
na końcu każdego polecenia (przed każdym monitem), ale po nim następuje 79 spacji (przy założeniu, że terminal ma szerokość 80 znaków), znak CR (ten, który powoduje powrót kursora do pierwszego kolumna) oraz sekwencję, którą należy usunąć do końca wiersza (a następnie monit).
W ten sposób, jeśli istniała linia niezakończona, ponieważ kursor nie znajduje się na pierwszej pozycji, te 80 znaków spowoduje przesunięcie kursora do następnej linii (i %
pozostanie). Jeśli nie, to tamto %
i te 79 spacji będzie w jednym wierszu, który zostanie później usunięty.
Teraz działa to tylko wtedy, gdy terminal zawija linie (na przykład, że nie będzie działał poprawnie po tput rmam
). Jeśli masz wolny terminal (jak na linii szeregowej 9600 bodów), możesz faktycznie zobaczyć te %
wyświetlane, a następnie usuwane po każdym poleceniu, więc zsh
możesz wyłączyć tę funkcję:
unsetopt prompt_cr prompt_sp
W ten sposób zsh
zachowuje się bardziej jak tradycyjne muszle.
Możesz także zmienić ten znak za pomocą $PROMPT_EOL_MARK
zmiennej.
print -n "this is a test"
następnieprint "this is a test"