Problem
Ich verwende oh-my-zsh und Antigen, um mein Zsh zu verwalten.
Manchmal gebe ich versehentlich einen falschen / fehlgeschlagenen Befehl in Zsh ein und es ist sehr ärgerlich, wenn das Plugin zsh-autosuggestions diese Befehle auslöst .
Sagen wir zum Beispiel, ich habe gut status
eher getippt
als git status
.
Wenn ich nun versuche, den richtigen Befehl erneut einzugeben g
, wird nach der Eingabe das Autosuggestion-Plugin angezeigt, gut status
da dies die engste Übereinstimmung in der jüngeren Geschichte darstellt. Aber das ist ein fehlgeschlagener Befehl!
Was ich tun möchte, ist zu verhindern, dass diese fehlgeschlagenen Befehle meinen Verlauf "verschmutzen", damit das Autosuggestion-Plugin sie nicht vorschlägt.
Was habe ich getan
Ich habe danach gesucht und die beste Übereinstimmung, um Einträge aus dem Verlauf herauszuhalten, ist das Festlegen von HIST_IGNORE_SPACE oder Methoden zum Ignorieren bestimmter Befehle oder zum manuellen Löschen von Befehlen nach deren Eingabe. Sehen Sie dies und das . Aber wie @Adaephon 52 feststellte, geschieht dies, nachdem die Tat getan ist.
Was ich überlege zu tun
Ich habe gerade vor, eine Funktion zu schreiben, die jedes Mal ausgelöst wird, wenn ein fehlgeschlagener Befehl in Zsh eingegeben wird, um den neuesten Eintrag aus dem Verlauf zu löschen. Ich bin jedoch nicht vertraut genug mit Zsh, um zu wissen, ob diese Art von Trigger existiert oder wie man das macht.
Hinweis zur akzeptierten Lösung
Für diejenigen, die an diesem Problem interessiert sind, funktioniert die akzeptierte Lösung in dem Sinne, dass fehlgeschlagene Befehle nicht in der Verlaufsdatei gespeichert werden. fc -l
oder history
bestätigt dies.
Es scheint jedoch, dass das zsh-autosuggestions-Plugin eine Art lokales Caching durchführt (oder Vorschläge mithilfe eines anderen Mechanismus generiert), sodass die fehlgeschlagenen Befehle weiterhin vorgeschlagen werden, jedoch nur, wenn die Sitzung nicht beendet ist . Wenn der Benutzer eine neue Instanz der Shell startet und das Plugin vermutlich den zwischengespeicherten Verlauf laden muss, werden die fehlgeschlagenen Befehle nicht mehr vorgeschlagen (es sei denn, Sie geben sie natürlich erneut ein).
Die vorgeschlagene Lösung ist technisch korrekt, da ich meine Frage (fälschlicherweise) so formuliert habe, dass nur eine Antwort erforderlich ist, die Zsh daran hindert, die fehlgeschlagenen Befehle zu speichern, und die akzeptierte Lösung dies tut (wenn auch in begrenztem Umfang; siehe Link in Lösung für Einzelheiten).
Jeder, der mit Shell -Skripten vertraut ist (ich bin es nicht) und motiviert genug ist, kann das Skript zsh-autosuggestions überprüfen .
~/.zshrc
.Der integrierte
fc
Befehl unterstützt das Bearbeiten Ihres Verlaufs. Falls Sie zB den vorherigen Befehl falsch eingegeben haben, können Sie Folgendes eingeben:Sie können durch
nano
den Befehl Ihres bevorzugten Editors ersetzen . Sie können dieEDITOR
Variable (Parameter) auch in Ihrer zsh-Konfiguration festlegen . ( Siehe verweisende SO-Seite )Sie müssen die Datei speichern (die von fc in einem temporären Systemordner erstellt wurde). Danach werden die Zeilen bearbeitet.
Enter
wird ausgeführt oder Sie können drückenCtrl+C
, um die Bearbeitung abzuschließen.Weitere Details finden Sie in der zsh-Dokumentation: Zsh: Bearbeitungsverlauf
Falls Sie den gesamten Verlauf bearbeiten möchten
... ersetzen Sie wieder Nano, wenn Sie möchten
Es schreibt einfach den Verlauf einschließlich des Caches aus und öffnet die Datei mit einem Editor.
Bitte beachten Sie, dass zsh drei Arten von Geschichte kennt:
Beachten Sie bitte, dass
SHARE_HISTORY
Sie denfc -W
Befehl zuerst in diesen Shells ausführen sollten , wenn Ihre Verlaufsdatei freigegeben ist ( ) und Sie mehr als eine zsh-Shell mit dem betreffenden Benutzer geöffnet haben . Wenn Sie mit der Bearbeitung fertig sind, führen Sie sie ausfc -R
. Andernfalls werden die in diesen Shells eingegebenen Befehle nicht gespeichert und erkennen dann Ihre manuelle Bearbeitung derHISTFILE
.quelle
Ich bin mir nicht sicher, wie omz es ausführt, aber sowohl in Bash- als auch in regulären Zsh-Präfixen mit einem Leerzeichen wird es aus der .history und fortan auch aus der automatischen Vervollständigung / Suggestion herausgehalten
dh
quelle