Histórico por diretório no zsh

8

Estou feliz em usar 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 em ~/my_project , geralmente invoco make target1 && ./run1 , mas quando estou em ~/second_project , geralmente preciso de make target2 && cat foobar | ./run2 .

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

Então, normalmente, eu uso cd ~/my_project e digito make e, em seguida, pesquiso para trás no histórico até encontrar o que preciso. Mas se acontecer de eu ter trabalhado em second_project , ao pesquisar o histórico eu vou encontrar alguns comandos que eu não preciso.

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

Idealmente, todos os outros comandos do histórico de correspondência aparecerão depois deles, especificando opcionalmente um número máximo de elementos de prioridade.

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

    
por AkiRoss 04.04.2013 / 16:52

3 respostas

5

Existe um plugin que afirma fazer exatamente o que você está procurando, apropriadamente chamado por plugin de histórico de diretório :

link

"Per-directory-history - rastreia o histórico de comandos anteriores, tanto por diretório atual quanto globalmente, com a capacidade de alternar entre eles na hora, ligado a ctrl-g." diz o seu wiki.

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

    
por 05.04.2013 / 18:44
0

Eu acabei de escrever um pequeno plugin que faz muito do que o plugin de Jim Hester faz, mas usa uma abordagem diferente que corrige muitos dos problemas listados no repositório GitHub daquele plugin:

link

Ele armazena um HISTFILE separado para cada diretório em que você executou comandos e adiciona um chpwd hook para alternar entre HISTFILE s quando você altera os diretórios.

Ele também fornece um widget zle que você pode ligar a um pressionamento de tecla que alternará o HISTFILE entre o seu "global" HISTFILE original e o HISTFILE do seu diretório de trabalho atual.

So, my question: does a plugin/setting/something exist for zsh such that, when searching in history, commands invoked in the current directory are displayed first?

O plug-in zsh-cwd-history atualmente não suporta isso, mas espero adicionar suporte a ele em breve.

    
por 16.02.2016 / 06:34
0

Eu tive exatamente o mesmo problema e escrevi um plugin ZSH que resolve: link

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

Ideally, every other matching history command will appear after those, optionally specifying a max number of priority elements.

Isso também funciona com o meu plugin.

    
por 12.04.2016 / 05:44