Essa é uma característica específica zsh
(e agora fish
também) de permitir que você veja claramente linhas não terminadas na saída de um comando.
Nos shells tradicionais, se um comando gerar alguns dados após o último caractere de nova linha, ou, em outras palavras, se deixar o cursor do terminal não no início da linha, o próximo prompt do shell será anexado à última linha não terminada como em:
bash-4.4$ printf XXX
XXXbash-4.4$
Isso controla o prompt, e é fácil perder isso XXX
, especialmente se você tiver um prompt mais sofisticado como esse. Também afeta o posicionamento do cursor, o que causa falhas na exibição quando você move o cursor.
zsh
contorna isso, mostrando que a saída tem uma linha não terminada com um %
caractere em vídeo em negrito e reverso e emite o próximo prompt no início da próxima linha:
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
Ele faz isso exibindo o vídeo reverso %
no final de cada comando (antes de cada prompt), mas seguido por 79 espaços (assumindo um terminal de 80 caracteres), um caractere CR (aquele que faz com que o cursor volte ao primeiro coluna) e a sequência a ser apagada no final da linha (e depois no prompt).
Dessa forma, se houver uma linha não terminada, já que o cursor não está na primeira posição, esses 80 caracteres farão o cursor mover para a próxima linha (e isso %
permanecerá). Caso contrário, %
esses e esses 79 espaços estarão em uma linha que será excluída posteriormente.
Agora, isso só funciona se o terminal quebrar linhas (por exemplo, que não funcionará corretamente depois tput rmam
). Se você tiver um terminal lento (como na linha serial de 9600 baud), poderá realmente ver aqueles %
sendo exibidos e removidos após cada comando, portanto, zsh
desabilite esse recurso:
unsetopt prompt_cr prompt_sp
Dessa forma, zsh
comporta-se mais como conchas tradicionais.
Você também pode alterar essa marca com a $PROMPT_EOL_MARK
variável
print -n "this is a test"
entãoprint "this is a test"