Como navegar na pesquisa reversa do bash?


40

O Bash oferece a funcionalidade de reverter a pesquisa via Ctrl+ R. Em seguida, pode-se digitar uma parte de um comando para mostrar uma entrada apropriada do histórico.

Suponha que esta é minha história:

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

Eu procuro por foo. Pressionar Ctrl+ Rnovamente mostra a próxima entrada de pesquisa apropriada. Muitas vezes acontece comigo que sou rápido demais e navego além do resultado pretendido e vim foo3é mostrado e agora quero voltar para vim foo2.

Portanto, minha pergunta é: como navego na pesquisa reversa?


Qual terminal você usa? Por exemplo. gnome-terminal, konsole, assim por diante ...
varesa

11
Bem, eu não estou muito familiarizado com ele ... A chave deve ser ctrl + S, mas alguns terminais parecem comer a chave, antes que ele atinja o inverso-search
varesa

Ctrl + shift + R - pesquisa para a frente enquanto ctrl + R
devansvd


Respostas:


36

Você pode acessar isso através da forward-search-historyfunção à qual está vinculado por padrão ctrl+s. Infelizmente, ctrl+sé usado para sinalizar xoffpor padrão, o que significa que você não pode usá-lo para alterar a direção da pesquisa. Existem duas soluções para solucionar o problema, uma desativando o envio da xoff/xonsinalização e a outra alterando a tecla de atalho paraforward-search-history

Desativar xon / xoff

Execute stty -ixonno seu terminal ou adicione-o ao seu ~/.bashrc. Isso permite que você use ctrl+spara usar a forward-search-historyfunção de histórico.

Para obter mais informações sobre o fluxo de controle, consulte Como descongelar depois de pressionar acidentalmente Ctrl-S em um terminal? e algumas das respostas

Alterar a combinação de teclas

Se você não quiser alterar o comportamento padrão, ctrl+spode alterar a combinação de teclas forward-search-historycom bind. Como a maioria das chaves já está definida no bash, talvez você precise ser criativo:

bind "\C-t":forward-search-history

Isso será vinculado ctrl+tao histórico de pesquisa direta, mas lembre-se de que, por padrão, ctrl+té executadotranspose-chars


Eu tentei a sua primeira solução stty -ixonno zshe ele funciona muito bem. No entanto, existem efeitos colaterais possivelmente indesejados na desativação da xoff/xonsinalização?
estudante de

@student Não é mais possível ctrl+spausar a saída do terminal. Se você nunca usou antes isso não é problema
Ulrich Dangel

11
Pelo que vale, fui com a segunda solução. Coisas boas ! Eu nunca soube que você poderia congelar o console pressionando C-s.. muito útil ao usar a cauda nos logs do servidor. Arrumado ! (Eu gostaria de ter uma outra upvote :))
Ashutosh Jindal

Não consegui obter a opção 2 para trabalhar no OSX. Eu tive que fazer isso:bind '"\C-t": history-search-forward'
stiemannkj1 26/03

0

Como alternativa à pesquisa reversa básica e à pesquisa direta fornecida pelo seu bash, convém procurar:

fzf , um "localizador nebuloso de linha de comando" auto-descrito.

Ele pode substituir a pesquisa reversa padrão do seu bash (e outros terminais).

Seus benefícios são que:

  • imprime uma lista de seus comandos do histórico
    • alterna a ordem cronológica ou de relevância pressionando Ctrl + R novamente
  • pode ser navegado através das teclas de seta (ou Ctrl + J / Ctrl + K)
  • permite procurar várias agulhas

Meu fluxo de trabalho agora se baseia completamente no fzf na pesquisa reversa básica em máquinas sobre as quais tenho controle.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.