Caracteres que não movem o cursor devem estar entre \[
e \]
no PS1, caso contrário, o bash acha que o prompt é mais longo do que realmente é. E devido à forma como esta variável é usada, você não pode ter uma função que emite texto colorido, pois você não pode escapar corretamente.
Veja o link para mais explicações.