Muitas vezes, quando insiro um comando longo no bash ou zsh (esses são os únicos dois shells em que tenho certeza de que vi isso), o cursor se deforma para algum lugar no meio da string que estou inserindo. Alguém pode explicar por que isso acontece, e se algo pode ser feito sobre isso?
Percebi que isso geralmente acontece quando navego no histórico do meu shell (usando as teclas de seta). Quando encontro uma entrada longa, a nova entrada longa se mistura com a entrada anterior, tornando o texto distorcido.
Tenho um exemplo com strings curtas, que acabei de notar:
A história contém:
mkdir sune1
mkdir sune2
Se eu navegar para mkdir sune1
e depois para mkdir sune2
, esperaria que minha linha de comando fosse mkdir sune2
(já que foi para isso que naveguei agora) - mas, em vez disso, recebo mkdir1sune2
.
Tenho notado isso com frequência há anos, mas nunca deixei que isso me incomodasse muito, mas acho que é hora de mudar! Então, alguma ideia?
Responder1
Sua string de prompt provavelmente escapou incorretamente de caracteres não imprimíveis. Se você tiver algo parecido com mudanças de cor em seu prompt, será necessário colocar \[
e \]
contornar as sequências de escape do terminal para que o bash possa saber que elas não ocupam espaço na tela - caso contrário, ele calculará mal onde o comando real está na tela e o atualizará no lugar errado. Veresta seção do TLDP. No zsh, coloque %{
e %}
contorne as sequências de escape.