A pesquisa reversa do histórico no bash seguida pelas teclas de seta faz com que o cursor seja exibido no local errado

A pesquisa reversa do histórico no bash seguida pelas teclas de seta faz com que o cursor seja exibido no local errado

Percebi que muitas vezes, quando estou pesquisando o histórico reverso na linha de comando via CTRL+ r, se eu quiser editar o comando, às vezes o cursor salta para a posição errada quando pressiono uma tecla de seta ou digito CTRL+ aou CTRL+ e. A posição específica para a qual ele salta parece ser um deslocamento igual ao tamanho do meu prompt de linha de comando, conforme definido em PS1.

Isso causa dificuldade porque a localização real do cursor é diferente daquela renderizada na tela; edições futuras no comando serão renderizadas como se o cursor estivesse onde ele saltou, mas o comando real mantém a localização correta sem qualquer salto.

Alguém sabe o que está causando isso ou como consertar?

EDIT: Se eu adicionar uma nova linha no final, PS1o problema parece desaparecer. No entanto, eu preferiria inserir o comando na mesma linha do prompt.

Responder1

Isso geralmente é causado por comandos em seu histórico com mais de uma linha. Quando você seleciona um item mais curto do histórico, ele não parece levar em consideração a largura do prompt ao renderizar novamente a linha de comando, então tudo depois desse comando longo é complicado.

A solução fácil que encontrei é apertar a tecla home, inserir “echo” e apertar enter. Em seguida, recupere o último comando e edite a partir daí. (Primeiro removendo o eco. :)

VEJA TAMBÉM a resposta de alexander-somov abaixo, que identifica uma maneira de corrigir a causa mais comum desse problema.

Responder2

Talvez você tenha sequências de escape não imprimíveis no PS1 não incluídas em \[ e \].

Certifique-se de incluir todos eles assim:

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

informação relacionada