J'ai remarqué cela à l'occasion avec une variété d'applications. J'ai souvent pensé que c'était parce que la sortie avait été annulée tôt (ctrl + c, par exemple) ou quelque chose de similaire, et que zsh remplissait un nouveau caractère de ligne. Mais maintenant, la curiosité a pris le dessus sur moi, puisqu'elle ne semble pas le faire en bash.
zsh
frapper
Le Sequence
programme est quelque chose que j'ai tiré d'un livre en lisant sur les certifications Java et que je voulais juste voir s'il serait compilé et exécuté. J'ai remarqué qu'il n'utilise pas la println()
méthode du System.out
package / class. Au lieu de cela, il utilise plaine vieux print()
.
Est-ce que l'absence d'un caractère de nouvelle ligne est la raison pour laquelle j'ai ce symbole?
print -n "this is a test"
alorsprint "this is a test"
PROMPT_EOL_MARK=''
dans mon .zshrc pour masquer la différence entre les retours à la ligne ou les retours à la fin.C'est une caractéristique spécifique
zsh
(et maintenantfish
aussi) de vous permettre de voir clairement les lignes non terminées dans la sortie d'une commande.Dans les coquilles traditionnelles, si une commande transmet des données après le dernier caractère de nouvelle ligne, ou, autrement dit, si elle laisse le curseur borne pas au début de la ligne, l'invite suivante par les extrémités shell jusqu'à annexé à cette dernière ligne non terminée un péché:
Cela altère l’invite, et il est facile de l’oublier,
XXX
surtout si vous avez une invite plus sophistiquée comme celle-là. Cela affecte également le positionnement du curseur, ce qui provoque des problèmes d'affichage lorsque vous déplacez le curseur.zsh
Contourne ce%
problème en montrant que la sortie comporte une ligne non terminée avec un caractère en gras et en vidéo inversée et affiche l' invite suivante au début de la ligne suivante:Pour ce faire, il envoie cette vidéo inversée
%
à la fin de chaque commande (avant chaque invite), suivie de 79 espaces (en supposant un terminal large de 80 caractères), un caractère CR (celui qui force le curseur à revenir à la première). colonne) et la séquence à effacer jusqu’à la fin de la ligne (puis l’invite).De cette façon, s'il y a une ligne non terminée, puisque le curseur n'est pas en première position, ces 80 caractères le feront passer à la ligne suivante (et cela
%
restera). Sinon,%
les 79 espaces seront placés sur une ligne et seront supprimés par la suite.Maintenant, cela ne fonctionne que si le terminal encapsule des lignes (par exemple, cela ne fonctionnera pas correctement après
tput rmam
). Si vous avez un terminal lent (comme sur une ligne série à 9600 bauds), il est possible que ceux-ci%
soient affichés puis supprimés après chaque commande.zsh
Vous pouvez donc désactiver cette fonctionnalité:De cette façon,
zsh
se comporte plus comme des coquilles traditionnelles.Vous pouvez également changer cette marque avec la
$PROMPT_EOL_MARK
variable.la source