Esa es una característica específica de zsh
(y ahora fish
también) que le permite ver claramente las líneas no terminadas en la salida de un comando.
En los shells tradicionales, si un comando emite algunos datos después del último carácter de nueva línea o, en otras palabras, si deja el cursor terminal no al comienzo de la línea, el siguiente mensaje del shell termina agregado a esa última línea no terminada como en:
bash-4.4$ printf XXX
XXXbash-4.4$
Eso estropea el aviso, y es fácil pasar por alto eso XXX
, especialmente si tienes un aviso más elegante como ese. También afecta la posición del cursor, lo que provoca problemas de visualización cuando mueve el cursor.
zsh
evita eso, al mostrar que la salida tiene una línea sin terminar con un %
carácter en negrita y video inverso, y emite el siguiente mensaje al comienzo de la siguiente línea:
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
Lo hace al emitir ese video inverso %
al final de cada comando (antes de cada solicitud), pero seguido de 79 espacios (suponiendo un terminal de 80 caracteres de ancho), un carácter CR (el que hace que el cursor regrese al primero columna) y la secuencia para borrar hasta el final de la línea (y luego la solicitud).
De esa manera, si hubiera una línea sin terminar, ya que el cursor no está en la primera posición, esos 80 caracteres harán que el cursor se mueva a la siguiente línea (y eso %
permanecerá). Si no, entonces eso %
y esos 79 espacios estarán en una línea que se eliminará después.
Ahora, eso solo funciona si el terminal hace líneas de ajuste (por ejemplo, eso no funcionará correctamente después tput rmam
). Si tiene un terminal lento (como en la línea serie de 9600 baudios), es posible que vea los que %
se muestran y luego se eliminan después de cada comando, por lo que le zsh
permite deshabilitar esa función:
unsetopt prompt_cr prompt_sp
De esa manera, se zsh
comporta más como conchas tradicionales.
También puede cambiar esa marca con la $PROMPT_EOL_MARK
variable.
print -n "this is a test"
entoncesprint "this is a test"