Estou usando felizmente zsh
há 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_project
digito make
e, 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.
fonte
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 :)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
HISTFILE
para cada diretório em que você executou comandos e adiciona umchpwd
gancho para alternar entreHISTFILE
s quando você altera os diretórios.Ele também fornece um widget zle que você pode vincular a um pressionamento de tecla que alterna
HISTFILE
entre o "global" originalHISTFILE
e oHISTFILE
diretório de trabalho atual.Atualmente, o plugin zsh-cwd-history não suporta isso, mas espero adicionar suporte em breve.
fonte
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.
Isso também funciona imediatamente com o meu plugin.
fonte