ZSH - produz toda a história?

37

Recentemente, mudei do bash para o zsh. No bash, uma maneira (além da pesquisa recursiva) que eu costumava encontrar comandos executados anteriormente era history | grep whatever: onde whateverestá o bit de comando que eu lembro.

No zsh, isso não está funcionando. historyretorna apenas alguns itens, mesmo que meu .zsh_historyarquivo contenha muitas entradas, as quais eu o configurei para fazer.

Como posso gerar todo o meu histórico, adequado para pesquisar grep?

Nathan Long
fonte

Respostas:

48

O histórico aceita um intervalo nas entradas zsh como [first] [last]argumentos, para que todos sejam executados history 0.

Para obter a ajuda do zsh (pelo menos em mente), digite Alt-ho comando history e isso trará a ajuda para os built-ins.

Kyle Brandt
fonte
3
Ótimo! Esse é um padrão irritante para mim, portanto, estou adicionando isso ao meu arquivo de aliases:alias history="history 0"
Nathan Long
7
Não que isso importe, mas a lista história começa em 1 e não 0.
ggustafsson
2
Eu mesmo estou usando esse alias:alias h='history 1 | grep'
Harald Nordgren
3
Isso não parece funcionar para mim: o meu ~/.zsh_historypossui 10066 linhas, mas history 0(ou seu equivalente fc -l 0) imprime apenas 4999 linhas.
Jayhendren
2
Para as history 1 | greppessoas, espero que você conheça ctrl+r- o melhor truque / atalho de todos os tempos!
Emil Vatai
9

A resposta aceita está correta, mas vale a pena notar que você não precisa chamar o grepbinário externo para fazer a pesquisa, pois essa capacidade está ativa. Eu tenho essa função definida em meu .zshrc:

histsearch() { fc -lim "*$@*" 1 }

Notas:

  • fcé o zsh embutido que controla o histórico interativo. historyé equivalente a fc -l.

  • A -mbandeira requer um padrão, que deve ser citado.

  • A -ibandeira adiciona um carimbo de data / hora.

  • fctem muito mais truques na manga (por exemplo, limitando a pesquisa ao histórico interno da sessão atual). Veja a zshbuiltins(1)página de manual ou a documentação oficial .

wjv
fonte
Melhor ainda é usar o padrão "* $ @ *" (observe estrelas adicionais) em vez de "$ @", pois o último produz apenas correspondências exatas.
Piotr Dobrogost
1
Você está completamente certo, @PiotrDobrogost! Não tenho certeza de como consegui enviar essa resposta no estado em que fiz - acho que devo ter digitado essa função na memória. Tal como está, não é muito utilizável, por isso vou editar a resposta para incorporar os asteriscos.
wjv
3

Dê uma olhada no fzf . Isso ajuda não apenas a encontrar "o que quer que seja" no histórico do shell, mas também em outros lugares interessantes, como o histórico do navegador, o diretório, etc.

O fzf é um localizador nebuloso da linha de comando. Isso significa que você pode procurar por partículas ou frações do que está procurando e ele exibirá uma coleção de correspondências que você pode refinar continuamente. É realmente um divisor de águas.

A página inicial do autor contém vários exemplos ilustrativos.

Daniel Schaffrath
fonte
Considere adicionar alguma referência a esta resposta para apoiar o que você declara.
Pimp Juice IT
Bem-vindo ao Super Usuário! Leia Como recomendar software para obter as informações mínimas necessárias e sugestões sobre como recomendar software para Superusuário. Para manter sua resposta útil, mesmo se o (s) link (s) fornecido (s) quebrar esses detalhes, deve ser editado em sua resposta.
Eu digo Restabelecer Monica