He notado esto en ocasiones con una variedad de aplicaciones. A menudo pensé que era porque la salida se canceló antes (ctrl + c, por ejemplo) o algo similar, y zsh está completando un nuevo carácter de línea. Pero ahora la curiosidad se ha apoderado de mí, ya que no parece hacer esto de manera contundente.
zsh
golpetazo
El Sequence
programa es algo que extraje de un libro mientras leía las certificaciones de Java y solo quería ver si se compilaba y ejecutaba. Me di cuenta de que no usa el println()
método del System.out
paquete / clase. En su lugar, usa simplemente viejo print()
.
¿Es la falta de un nuevo carácter de línea la razón por la que obtengo este símbolo?
print -n "this is a test"
entoncesprint "this is a test"
PROMPT_EOL_MARK=''
en mi .zshrc para ocultar la diferencia entre la nueva línea final o no en la salida del comando.Esa es una característica específica de
zsh
(y ahorafish
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:
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: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 lezsh
permite deshabilitar esa función:De esa manera, se
zsh
comporta más como conchas tradicionales.También puede cambiar esa marca con la
$PROMPT_EOL_MARK
variable.fuente