Befehlsgeschichte in Zsh

61

Wie verfolgt Zsh den Befehlsverlauf?

Ich sehe zwei Dateien in meinem Homeverzeichnis: .zhistoryund .zsh_history. Was ist der Unterschied zwischen ihnen? Die Dateien scheinen meine gesamte Historie zu enthalten . Hat Zsh halten Linien zu einem von ihnen anhängt für immer ? Wäre die Suche nach Verlauf nicht zu langsam?

Kann ich diese Dateien sicher als symbolische Links zu einem anderen Speicherort einrichten? (zB ein Git-Repository, um Änderungen im Verlauf zu verfolgen)

Amelio Vazquez-Reina
quelle
Überprüfen Sie Ihre ~/.zshrcund / oder /etc/zshrcdie dort beschriebenen Optionen. Zsh.sourceforge.net/Guide/zshguide02.html#l17
UVV

Antworten:

78

Zsh speichert Eingabezeilen (möglicherweise mit Zeitinformationen) in der durch die Variable angegebenen Datei HISTFILE. Dies sollte ein absoluter Dateiname sein (ansonsten wird er relativ zu dem jeweils aktuellen Verzeichnis interpretiert).

Zsh hat keinen eingebauten Standardwert für HISTFILE. Die zsh-Distribution wird mit einem Setup-Assistenten für neue Benutzer ausgeliefert, in den der Wert ~/.histfileintegriert ist. Daher erhalten zsh-Benutzer diesen Assistenten standardmäßig. Oh-my-zsh wird mit HISTFILE=.zhistoryVoreinstellung geliefert. Es sieht also so aus, als hätten Sie zsh sowohl mit dem Standard-Setup als auch mit oh-my-zsh ausprobiert. Überprüfen Sie Ihre .zshrc(oder die Dateidaten), um festzustellen, welche Sie gerade verwenden.

Wie zsh die Datei öffnet und was passiert, wenn es sich um eine symbolische Verknüpfung handelt, hängt von mehreren Optionen ab.

  • Wenn eine der Optionen append_history(standardmäßig festgelegt) inc_append_historyoder share_historyfestgelegt ist oder wenn der Verlauf explizit mit gespeichert wird fc -AI, wird zsh an die vorhandene Datei angehängt.
    Beachten Sie, dass zsh auch unter diesen Einstellungen die Datei gelegentlich wie unten beschrieben überschreibt, um sie auf die Größe zu verkleinern.
  • Andernfalls hist_save_by_copyschreibt zsh eine temporäre Datei , wenn die Option aktiviert ist (sie ist seit zsh 5.0 standardmäßig aktiviert, in 4.2 jedoch nicht vorhanden) und verschiebt sie nach Abschluss an ihren Platz. In diesem Fall ersetzt die neue Datei die symbolische Verknüpfung, wenn die Verlaufsdatei eine symbolische Verknüpfung war.
  • Andernfalls überschreibt zsh die vorhandene Datei.

Anstatt zsh auf einen symbolischen Link zu zeigen, legen Sie fest HISTFILE, wo sich die Verlaufsdatei befinden soll.

Wie viele Zeilen des Verlaufs aufbewahrt werden, wird über die Variablen HISTSIZEund konfiguriert SAVEHIST. HISTSIZEist die maximale Anzahl von Zeilen, die in einer Sitzung aufbewahrt werden, und SAVEHISTist die maximale Anzahl von Zeilen, die in der Verlaufsdatei aufbewahrt werden.

Um einen Verlauf überhaupt zu speichern, müssen Sie beide HISTFILEund SAVEHISTals Standardwert SAVEHIST0 festlegen. Möglicherweise möchten Sie auch eine Erhöhung HISTSIZEvornehmen (ab zsh 5.0 beträgt der Standardwert nur 30).

Gilles 'SO - hör auf böse zu sein'
quelle