Você deve agrupar todas as seqüências de escape entre \[
e \]
para 'readline' calcular corretamente o comprimento visível do prompt. Sem eles, 'readline' acha que o prompt é mais longo do que é e não sabe quando o texto chega à margem.
PS1="\[\e[;31m\][\u@\h \W]\$ \[\e[m\]"