Я заметил это в разных случаях. Я часто думал, что это потому, что вывод был отменен рано (например, Ctrl + C) или что-то подобное, и zsh заполняет символ новой строки. Но теперь любопытство взяло верх над мной, так как в bash оно этого не делает.
ЗШ
удар
Sequence
Программа что - то я вытащил из книги во время чтения на Java сертификации и просто хотел , чтобы увидеть , если он будет скомпилировать и запустить. Я заметил, что он не использует println()
метод из System.out
пакета / класса. Вместо этого он использует старый добрый print()
.
Является ли отсутствие символа новой строки причиной получения этого символа?
print -n "this is a test"
тогдаprint "this is a test"
PROMPT_EOL_MARK=''
в свой .zshrc, чтобы скрыть разницу между завершающим символом новой строки или нет при выводе команды.Это особенность
zsh
(и теперьfish
тоже), позволяющая вам четко видеть неопределенные строки в выводе команды.В традиционных оболочках, если команда выводит некоторые данные после последнего символа новой строки, или, другими словами, если она оставляет курсор терминала не в начале строки, следующее приглашение оболочки завершается добавлением к этой последней неопределенной строке как в:
Это искажает подсказку, и это легко пропустить,
XXX
особенно если у вас есть такая необычная подсказка. Это также влияет на позиционирование курсора, что вызывает сбои дисплея при перемещении курсора.zsh
обходит это, показывая, что вывод имеет неопределенную строку с%
символом в жирном и обратном видео, и выдает следующее приглашение в начале следующей строки:Это достигается путем вывода этого обратного видео
%
в конце каждой команды (перед каждым приглашением), за которым следуют 79 пробелов (при условии, что терминал шириной 80 символов), символ CR (тот, который заставляет курсор возвращаться к первому столбец) и последовательность, которую необходимо удалить до конца строки (а затем подсказка).Таким образом, если была неопределенная строка, так как курсор находится не на первой позиции, эти 80 символов заставят курсор переместиться на следующую строку (и это
%
останется). Если нет, то эти%
и те 79 пробелов будут в одной строке, которая будет впоследствии удалена.Теперь это работает, только если терминал выполняет перенос строк (например, после этого он не будет работать должным образом
tput rmam
). Если у вас медленный терминал (как, например, на последовательной линии 9600 бод), вы можете увидеть те,%
которые отображаются, а затем удаляются после каждой команды, поэтомуzsh
вы можете отключить эту функцию:Таким образом,
zsh
ведет себя больше как традиционные оболочки.Вы также можете изменить эту отметку с помощью
$PROMPT_EOL_MARK
переменной.источник