Zauważyłem to przy różnych aplikacjach. Często myślałem, że dzieje się tak, ponieważ wynik został wcześniej anulowany (na przykład ctrl + c) lub coś podobnego, a zsh wypełnia nowy znak wiersza. Ale teraz ciekawość zwyciężyła we mnie, ponieważ wydaje się, że nie robi tego w bash.
zsh
grzmotnąć
Sequence
Program jest coś wyciągnąłem z książki podczas czytania na certyfikaty Java i po prostu chciałem zobaczyć, czy to skompilować i uruchomić. Zauważyłem, że nie używa println()
metody z System.out
pakietu / klasy. Zamiast tego używa zwykłego starego print()
.
Czy brak nowego znaku linii powoduje, że otrzymuję ten symbol?
print -n "this is a test"
następnieprint "this is a test"
PROMPT_EOL_MARK=''
wstawiłem do mojego .zshrc, aby ukryć różnicę między końcowym znakiem nowej linii lub brakiem wyniku polecenia.Jest to specyficzna cecha
zsh
(i terazfish
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:
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: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ęczsh
możesz wyłączyć tę funkcję:W ten sposób
zsh
zachowuje się bardziej jak tradycyjne muszle.Możesz także zmienić ten znak za pomocą
$PROMPT_EOL_MARK
zmiennej.źródło