Como posso pesquisar o histórico com o texto já digitado no prompt em zsh?

45

No zsh, sei que posso pesquisar o histórico com Ctrl + r . No entanto, muitas vezes eu começo a digitar um comando diretamente no prompt, mas depois percebo que deveria estar pesquisando a história. Quando clico em Ctrl + r , aparece um prompt de pesquisa de histórico em branco como este:

Observecomohátextonomeuprompt,masnãonopromptdepesquisadohistórico.Comofaçoparainiciarapesquisadehistóricocomotextojánoprompt,assimparece:

    
por Sean Mackesey 27.10.2013 / 20:57

9 respostas

32

Você pode usar a funcionalidade history-search do zle:

bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward

Isto liga Acima e Abaixo (ajusta suas próprias seqüências de escape) para uma busca de histórico, para trás e para frente, baseado no que já foi digitado no prompt.

Então, se você digitar "vim" e clicar em Acima , o zsh irá percorrer o seu histórico apenas para os comandos que começam com "vim".

Você também pode colocar o cursor no final da linha depois de selecionar o comando desejado no histórico do zsh usando o função history-search-end (normalmente localizada em /usr/share/zsh/functions/Zle/ ) e anexando -end ao final de cada linha, assim:

autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end
    
por 27.10.2013 / 21:25
15

Outra opção útil é history | grep

Atribua um alias, por exemplo,

alias hg='history | grep'

você pode digitar hg whatever para pesquisar os comandos que usou, por exemplo,

$ hg chmod                                                                                                       
 1309  chmod +x rotate_files.sh 
 1385  chmod +x rotate_files_270.sh 
 1512  chmod +x testy.sh 
 1528  chmod +x act_on_2_numbers.sh 
 2142  chmod +x ~/bin/display_tmux_pane_pwd.sh
 4532  chmod +x cat_files.rb 

Eu coloquei esse alias em meus arquivos de ponto.

    
por 28.10.2013 / 03:37
7

Você pode querer usar o script no link

Onde você pode digitar qualquer parte de qualquer comando previamente digitado e pressionar as teclas Up e Down para percorrer os comandos correspondentes.

    
por 28.10.2013 / 02:51
5

Se você estiver usando oh-my-zsh , adicione history-substring-search à linha plugins=(...) .

Em seguida, adicione

bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down

em algum lugar abaixo da linha que leu source $ZSH/oh-my-zsh.sh . Salve e inicie um novo terminal ou execute source ~/.zshrc no terminal atual.

    
por 11.12.2015 / 16:16
3

Eu recomendo usar "$terminfo[kcuu1]" ou "$key[Up]" em vez de material codificado como "^[[A" , que pode ou não funcionar em qualquer sistema em particular.

Confira /etc/zsh/zshrc para mais chaves. Aqui está o que parece no meu sistema. Acho que as chaves terminfo têm maior probabilidade de serem definidas.

key=(
    BackSpace  "${terminfo[kbs]}"
    Home       "${terminfo[khome]}"
    End        "${terminfo[kend]}"
    Insert     "${terminfo[kich1]}"
    Delete     "${terminfo[kdch1]}"
    Up         "${terminfo[kcuu1]}"
    Down       "${terminfo[kcud1]}"
    Left       "${terminfo[kcub1]}"
    Right      "${terminfo[kcuf1]}"
    PageUp     "${terminfo[kpp]}"
    PageDown   "${terminfo[knp]}"
)
    
por 17.11.2017 / 22:47
3

Que tal usar zsh-autosuggestions ?

O problema é que, para cada comando que você digita, esse plug-in mostrará algumas sugestões que podem ser aceitas ou não. Experimente e nos dê um feedback.

Sem plugins, podemos pressionar Ctrl r para realizar uma busca reversa no histórico, assim que você começar a digitar os comandos correspondentes aparecerão como sugestões.

    
por 03.05.2016 / 18:16
2

Eu uso o plugin vi-mode . E então no meu ~ / .zshrc eu tenho as seguintes ligações:

bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward

Isso permite que eu use o ^P e o ^N como pesquisa normal para trás e para frente se eu não inserir nenhum texto e como pesquisa filtrada, se eu fizer isso.

    
por 08.08.2018 / 13:22
1

Concordo com cheflo que a pesquisa "substring" é mais útil. Eu não posso comentar lá, então eu comecei uma nova resposta. Eu uso oh-my-zsh, e adiciono "history-substring-search" aos plugins = (...) de ~ / .zshrc. Então fonte ~ / .zshrc. Não precisa adicionar mais nada. Use "bindkey" para verificar:

"^[OA" history-substring-search-up
"^[OB" history-substring-search-down

Mais tarde, você digita "para" e seta para cima, "histórico" aparecerá e "para" destacado (se você usou o comando "history" antes).

    
por 23.08.2016 / 21:01
1

Você pode usar zaw , que substitui completamente sua pesquisa por uma super pesquisa de palavras-chave muito melhor e corrige sua Um problema tão bem pesquisando histórico é apenas uma das coisas que o zaw pode pesquisar.

introdução / discussão aqui

    
por 01.09.2016 / 13:57