Por que alguns comandos (geralmente longos) são distorcidos no bash & zsh?

10

Muitas vezes, quando insiro um comando longo no bash ou no zsh (essas são as únicas duas conchas em que já vi isso), o cursor muda para algum lugar no meio da string em que estou inserindo, alguém pode explicar por que isso é, e se algo pode ser feito sobre isso?

Percebi que isso geralmente acontece quando navego pelo histórico do meu shell (usando as teclas de seta). Quando encontro uma entrada longa, a entrada nova e longa se confunde com a entrada anterior, deixando o texto ilegível.

Eu 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, eu esperaria que minha linha de comando fosse mkdir sune2(já que é para isso que eu naveguei agora) - mas, em vez disso, entendo mkdir1sune2.

Eu notei isso com frequência por anos, mas nunca deixei isso me incomodar muito, mas acho que é hora de mudar! Então, alguma ideia?

Jonatan
fonte

Respostas:

8

Sua seqüência de caracteres de prompt provavelmente escapou incorretamente de caracteres não imprimíveis. Se você tiver algo parecido com alterações de cor em seu prompt, precisará colocar \[e \]contornar as seqüências de escape do terminal para que o bash possa dizer que elas não ocupam espaço na tela - caso contrário, calcula mal onde o comando real está na tela e atualiza-o. no lugar errado. Veja esta seção do TLDP . No zsh, coloque %{e %}contorne seqüências de escape.

Gordon Davisson
fonte
Na verdade, tenho cores no meu prompt, tentarei escapar delas ou removê-las e ver se isso ajuda. Obrigado!
Jonatan
Considere usar o módulo de cores do zsh. Deve evitar os erros stackoverflow.com/questions/6159856/...
Francisco