Tente colocar os parênteses \[...\]
ao redor das seqüências de escape de cores. Esses colchetes dizem bash que o conteúdo tem 0 caracteres de comprimento quando exibido assim se você colocar caracteres reais dentro então bash vai pensar que sua linha é menor do que realmente é.
Para endereçar seus comentários (e melhorar essa resposta), o prompt de trabalho:
'\[\e[0;31m\]\u \W $(__git_ps1 "(%s)")\$ \[\e[m\]'
difere do original pelo uso dos colchetes com escape \[
e \]
. As sequências entre estas braçadeiras, e. \e[0;31m
é uma sequência de escape que altera a cor do texto no seu prompt e \e[m
é uma seqüência de escape que retorna a cor à cor padrão. Estas sequências não escrevem caracteres reais para o terminal, então você precisa dizer ao bash para não contá-los em relação ao tamanho do prompt; os colchetes são como comunicar isso ao bash.
Em seu prompt original, você tinha os colchetes ao redor do prompt inteiro, e isso informa ao bash que seu prompt tem 0 bytes de comprimento e, portanto, seu prompt será sobrescrito sob determinadas circunstâncias que você descobriu que antecederam o post. Se você não tivesse colchetes, você notaria o oposto e as coisas apareceriam alguns caracteres após o prompt, em vez de apenas alguns.
Meu comentário sobre o prompt do git foi apenas para garantir que o tamanho do prompt estava sendo rastreado corretamente. Se a cor não estiver mudando, é provável que você esteja bem. Uma regra básica para escrever seu prompt é colocar os códigos de cores (as seqüências \e...m
) dentro dos colchetes e nada mais.