Problema
Estou usando o oh-my-zsh e o Antigen para gerenciar meu Zsh.
Por vezes, introduzo acidentalmente um comando errado / falhado no Zsh e é muito irritante quando o plug-in zsh-autosuggestions lança esses comandos.
Por exemplo, digamos que eu digitei
gut status
em vez de git status
.
Agora, enquanto tento digitar o comando correto novamente, depois de digitar g
, o plug-in de auto-sugestão lançará gut status
, já que é a correspondência mais próxima no histórico recente. Mas isso é um comando falhado!
O que eu quero fazer é evitar que esses comandos com falha "poluam" meu histórico , para que o plug-in de auto-sugestão não os sugira.
O que eu fiz
Eu procurei por isso e a correspondência mais próxima para manter as entradas do histórico é a configuração de HIST_IGNORE_SPACE, ou métodos para ignorar comandos específicos ou para excluir comandos manualmente após inseri-los. Veja this e isso . Mas como observou @Adaephon 52, isso ocorre depois que a ação é feita.
O que estou pensando em fazer
O que eu tenho em mente agora é escrever uma função que é acionada toda vez que um comando com falha é inserido no Zsh para excluir a última entrada do histórico. No entanto, não estou familiarizado o suficiente com o Zsh para saber se esse tipo de gatilho existe ou como fazê-lo.
Nota sobre a solução aceita
Para aqueles que estão interessados nesse problema, a solução aceita funciona no sentido de que os comandos com falha não são armazenados no arquivo de histórico. fc -l
ou history
confirma isso.
No entanto, parece que o plugin zsh-autosuggestions está fazendo seu próprio cache local de classificações (ou está gerando sugestões usando outro mecanismo), então ele ainda sugere os comandos com falha, mas somente se a sessão não terminar . Quando o usuário inicia uma nova instância do shell, quando presumivelmente o plug-in precisa carregar o histórico em cache, ele não sugere mais os comandos com falha (a menos que você os insira novamente, é claro).
A solução proposta é tecnicamente correta, pois eu (equivocadamente) emoldurei a minha questão de tal forma que ela requer apenas uma resposta que impeça o Zsh de armazenar os comandos com falha e a solução aceita faz isso (embora de maneira limitada; em solução para detalhes).
Qualquer um que esteja familiarizado com scripts de shell (não estou) e motivado o suficiente pode verificar o Script zsh-autosuggestions .