C'est une caractéristique spécifique zsh
(et maintenant fish
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é:
bash-4.4$ printf XXX
XXXbash-4.4$
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:
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
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é:
unsetopt prompt_cr prompt_sp
De cette façon, zsh
se comporte plus comme des coquilles traditionnelles.
Vous pouvez également changer cette marque avec la $PROMPT_EOL_MARK
variable.
print -n "this is a test"
alorsprint "this is a test"