Como pesquisar toda a história do bash sem precisar ir para frente e para trás?

6

Às vezes, quando faço Ctrl R para pesquisar no histórico de comandos, descubro que não alcanço a entrada que estava procurando, mesmo sabendo que é na história. Eu acho que isso é devido a eu ter passado a entrada, obrigando-me a usar outro comando para ir na outra direção. Existe um comando que permite percorrer todo o histórico percorrendo-o (reiniciando o ciclo) quando chega ao fim?

    
por Tshepang 07.02.2011 / 21:30

1 resposta

9

Você poderia usar Alt + > para voltar ao final do seu histórico e depois procurar novamente, mas talvez você soubesse disso, e não é o que você quer.

Infelizmente, não acho que haja uma maneira de fazer isso acontecer.

Não consigo ver nada sobre isso em man bash ou man readline .

Poderíamos tentar escrever uma macro readline , mas não há nenhuma variável nos dizendo em que linha da história estamos.

Por isso, abaixo algumas outras sugestões que você pode encontrar alternativas viáveis:

Se o seu terminal estiver configurado para enviar Ctrl + S , (ex. executando stty stop undef ), então você pode mudar de direção apenas pressionando Ctrl + S .

Você pode usar history | grep <whatever> e digitar !<number from left column> para executá-lo.

Se for muito longo para digitar, faça uma função para economizar alguma digitação, por exemplo,

hgrep() {
    history | grep "$@"
}

Configure history-search-backward e history-search-forward . Eles podem ser mais fáceis de usar.

por exemplo. ls Alt + P , Alt + P , Alt + P irá procurar para trás todos os seus comandos ls .

Além disso, você pode alterar as direções apenas pressionando o outro atalho, por exemplo, se você estiver no comando mais antigo, você pode simplesmente mudar de Alt + P para pressionar Alt + N .

Configure, colocando isso no seu /etc/inputrc ou .inputrc para bash :

$if mode=emacs
"\ep": history-search-backward
"\en": history-search-forward
$endif

e isso no seu .zshrc para zsh :

bindkey -M emacs '^[p' history-beginning-search-backward
bindkey -M emacs '^[n' history-beginning-search-forward

Você pode até dar um passo além e fazer a seta para cima fazer isso.

Finalmente, você tem certeza de que o comando está sendo inserido no histórico? Talvez esteja sendo ignorado devido às configurações de HISTCONTROL ou HISTIGNORE ou esteja caindo no final devido a HISTSIZE ?

    
por 07.02.2011 / 21:56