Por que o CTRL-r age de maneira estranha (mostrando apenas parte de um comando) no OS X

10

Ctrl+ ré uma ótima ferramenta para procurar .bash_historycomandos executados anteriormente.

No entanto, quando o uso no meu OS X Terminal.app, vejo um comportamento estranho e fiquei imaginando se alguém vê a mesma coisa ou sabe como corrigi-la.

  1. Ctrl+r
  2. digite algo como find
  3. oh legal, olha ... é o comando que eu queria find . -exec grep -q "hello world" '{}' \; -print
  4. Quero executar esse comando, mas mudar o olá mundo para outra coisa.
  5. Então eu bati ou
  6. Agora, o comando é SORTA na linha de comando, mas sempre se parece com uma versão truncada do comando, assim: -q "blog_posts_by" '{}' \; -printonde o comando todo está lá, e eu posso usar as teclas do cursor para percorrer a linha, mas não todas. está impresso. Há uma desconexão entre o que é mostrado na linha e o que o terminal realmente pensa que estou editando.

Alguém tem idéia de por que isso pode acontecer? Não é um fenômeno fácil pesquisar nas webs.

bryan kennedy
fonte
Isso acontece apenas em linhas maiores que a largura da janela do termo?
Essobi
Qual versão do Terminal.App/OSX você está executando no BTW? Versão Bash? Você pode nos mostrar o seu .bashrc também?
Essobi

Respostas:

14

Você provavelmente tem seqüências de escape para cores no prompt que não são delimitadas corretamente. Eles precisam ser incluídos em \[e \].

PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\]\$ `

O comprimento das seqüências de caracteres que não são de impressão não é incluído no comprimento do prompt, quando são incluídos, e a posição dos comandos anteriores precisa ser calculada para a exibição adequada quando eles são quebrados.

Pausado até novo aviso.
fonte
OK, eu tinha mais alguns problemas, que foram resolvidos pelo respondente mais sobre este tópico StackOverflow - stackoverflow.com/questions/35563/...
bryan kennedy
Isso se aplica a novas linhas no prompt também. Tive uma sequência de controle hicolor descartada porque estava no início de PS1, mas não novamente após o novo caractere de linha.
Walf
0

Isso pode ser devido à maneira como as teclas de escape estão configuradas no seu Terminal, o que normalmente faço é usar a seta esquerda ou direita no iTerm ou no Terminal.app, já que não sou fã de pressionar o retorno imediatamente, isso funciona para você ?

Lynxman
fonte
0

Outra causa possível para esse problema é ter o TERMvalor errado . Por exemplo, isso aconteceu comigo quando eu estava usando cores no meu PS1, mas o meu TERMestava definido como xterm. Eu mudei para xterm-256colore o CTRL-r começou a funcionar corretamente novamente.

Tony
fonte