Sto utilizzando oh-my-zsh e Antigen per gestire la mia Zsh.
A volte accidero accidentalmente un command errato / fallito in Zsh ed è molto fastidioso quando il plugin zsh-autosuggestions genera questi comandi.
Per esempio, dico che ho digitato lo gut status
piuttosto che git status
.
Ora, mentre tento di digitare nuovamente il command corretto, una volta digitato g
, il plugin di autosuggestione lancerà lo gut status
quanto è la corrispondenza più vicina nella storia recente. Ma questo è un command fallito!
Quello che voglio fare è mantenere questi comandi falliti da "inquinare" la mia storia in modo che il plugin di autosuggestione non li suggerisca.
Ho cercato questo e la corrispondenza più vicina a mantenere le voci dalla cronologia è quella di impostare HIST_IGNORE_SPACE o methods per ignorare comandi specifici o per eliminare manualmente i comandi dopo l'inserimento. Vedi questo e questo . Ma come ha notato @Adaephon 52, questo avviene dopo che l'azione è stata fatta.
Quello che ho in mente adesso è scrivere una function che viene triggersta each volta che un command fallito viene inserito in Zsh per eliminare l'ultima voce dalla cronologia. Tuttavia, non sono abbastanza familiare con Zsh per sapere se esiste questo tipo di trigger o come farlo.
Per coloro che sono interessati a questo problema, la soluzione accettata funziona nel senso che i comandi falliti non vengono memorizzati nel file di cronologia. fc -l
o la history
conferma questo.
Tuttavia, sembra che il plugin zsh-autosuggestions sta facendo la propria cache locale di vari tipi (o genera suggerimenti che utilizzano altri meccanismi), quindi suggerirà comunque i comandi falliti, ma solo se la session non finisce. Quando l'utente avvia una nuova istanza della shell, quando presumibilmente il plugin deve caricare la cache nella cache, non suggerisce più i comandi falliti (a less che non li inserisca di nuovo ovviamente).
La soluzione proposta è tecnicamente corretta poiché ho (erroneamente) inquadrato la mia domanda in modo tale che richiede solo una risposta che impedisca a Zsh di memorizzare i comandi falliti e la soluzione accettata lo fa (anche se in modo limitato; dettagli).
Chiunque abbia familiarità con lo script di shell (non lo so) e sufficientemente motivato può controllare lo script zsh-autosuggestions .
Bart Schaefer ha proposto il seguente approccio alla stessa domanda sulla mailing list degli utenti zsh :
zshaddhistory() { whence ${${(z)1}[1]} >| /dev/null || return 1 }
Questa function viene eseguita prima che la row di command venga scritta nella cronologia. Se restituisce 1, la row di command corrente non viene aggiunta al file di cronologia né allo stack di cronologia locale. Tuttavia, il controllo se il command innesca un errore di command non trovato copre solo casi semplici. Ad esempio questa linea sarà sulla storia:
echo foo; echooo bar
Ma funziona bene per il tuo esempio
gut status
Si prega di notare che il command errato apparirà su UP-ARROW
(in modo che tu possa correggerlo!), Ma non è nello stack della storia; controllare con fc -l
.
non so come funziona omz, ma in entrambi i bash e il normale prefisso di zsh con uno spazio lo mantiene fuori di .history e quindi anche fuori del completamento automatico / suggerisce
vale a dire
<space>ll -ahZ /home/%USER