Histórico por diretório no zsh

10

Estou usando felizmente zshhá algum tempo e estou bastante satisfeito com minhas configurações de histórico, que são:

# Write to history immediately
setopt inc_append_history
# History shared among terminals
setopt share_history
# Save extended info in history
setopt extended_history
# Ignore duplicates
setopt hist_ignoredups

Mas acontece frequentemente que eu preciso usar comandos específicos dentro de alguns diretórios específicos. Por exemplo, quando estou dentro ~/my_project, costumo invocar make target1 && ./run1, mas quando estou ~/second_project, geralmente preciso make target2 && cat foobar | ./run2.

Ou seja: diretórios diferentes, mas comandos semelhantes.

Então, eu normalmente cd ~/my_projectdigito makee, em seguida, procuro na história até encontrar o que preciso. Mas, se eu trabalhei second_project, ao pesquisar o histórico, encontrarei alguns comandos que não preciso.

Então, minha pergunta: existe um plugin / setting / algo para o zsh que, ao pesquisar no histórico, os comandos invocados no diretório atual sejam exibidos primeiro?

Idealmente, todos os outros comandos do histórico correspondente aparecerão depois deles, especificando opcionalmente um número máximo de elementos prioritários.

Eu tentaria escrever algo assim sozinho, mas ainda não sei como escrever plugins zsh personalizados, como lidar com a história e assim por diante.

AkiRoss
fonte

Respostas:

6

Há um plug-in que afirma fazer exatamente o que você está procurando, adequadamente nomeado por plug - in de histórico de diretórios :

https://github.com/jimhester/oh-my-zsh/commit/baa187e4b903f39422a84b580e6e617ec3738e09

"Per-directory-history - rastreia o histórico de comandos anteriores por diretório atual e globalmente, com a capacidade de alternar entre eles em tempo real, vinculado a ctrl-g." diz o wiki deles.

Eu ainda não testei, mas de acordo com os comentários, deve funcionar.

superuser0
fonte
1
Bom obrigado! Vou tentar antes de aceitar, se você não se importa :)
AkiRoss
1
Até que eu perdi alguma coisa, o plug-in não exatamente o que eu preciso, no sentido de que por diretório e históricos globais são alternados entre si usando ctrl-g(e não por prioridade, como eu pedi). No entanto, eu ainda achar que é extremamente útil e uma boa resposta à minha pergunta, então, graças :)
AkiRoss
Talvez seja devido a alterações no ZSH, mas este plugin em sua versão atual não parece lidar com a edição correta do histórico do ZSH.
Owen
0

Acabei de escrever um pequeno plug-in que faz muito do que o plug-in de Jim Hester faz, mas usa uma abordagem diferente que corrige muitos dos problemas listados no repositório GitHub desse plug-in:

https://github.com/ericfreese/zsh-cwd-history

Ele armazena um separado HISTFILEpara cada diretório em que você executou comandos e adiciona um chpwdgancho para alternar entre HISTFILEs quando você altera os diretórios.

Ele também fornece um widget zle que você pode vincular a um pressionamento de tecla que alterna HISTFILEentre o "global" original HISTFILEe o HISTFILEdiretório de trabalho atual.

Então, minha pergunta: existe um plugin / setting / algo para o zsh que, ao pesquisar no histórico, os comandos invocados no diretório atual sejam exibidos primeiro?

Atualmente, o plugin zsh-cwd-history não suporta isso, mas espero adicionar suporte em breve.

Eric Freese
fonte
0

Eu tive exatamente o mesmo problema e escrevi um plugin ZSH que o resolve: https://github.com/tymm/zsh-directory-history

Você não precisa alternar manualmente entre o histórico global e de diretório ao usar meu plug-in.

Idealmente, todos os outros comandos do histórico correspondente aparecerão depois deles, especificando opcionalmente um número máximo de elementos prioritários.

Isso também funciona imediatamente com o meu plugin.

tymm
fonte