ZSH - ganze Geschichte ausgeben?

37

Ich bin kürzlich von bash auf zsh umgestiegen. In Bash war eine Möglichkeit (neben der rekursiven Suche), zuvor ausgeführte Befehle zu finden, die history | grep whatever, an whateverdie ich mich erinnere.

In zsh funktioniert das nicht. historygibt nur wenige Elemente zurück, obwohl meine .zsh_historyDatei viele Einträge enthält, für die ich sie konfiguriert habe.

Wie kann ich meinen gesamten Verlauf ausgeben, mit dem ich suchen kann grep?

Nathan Long
quelle

Antworten:

48

Der Verlauf akzeptiert einen Bereich in zsh-Einträgen als [first] [last]Argumente, damit alle ausgeführt werden history 0.

Um die zsh-Hilfe (zumindest mit Bedacht) zu erhalten, tippen Alt-hSie den Befehl history ein. Dadurch wird die Hilfe für integrierte Funktionen aufgerufen.

Kyle Brandt
quelle
3
Groß! Das ist allerdings eine nervige Voreinstellung für mich. Deshalb füge ich Folgendes zu meiner Aliase-Datei hinzu:alias history="history 0"
Nathan Long,
7
Nicht, dass es darauf ankommt, aber die Verlaufsliste beginnt bei 1 und nicht bei 0.
ggustafsson
2
Ich benutze diesen Alias ​​selbst:alias h='history 1 | grep'
Harald Nordgren
3
Das scheint bei mir nicht zu funktionieren: mein ~/.zsh_historyhat 10066 Zeilen, aber history 0(oder das Äquivalent fc -l 0) druckt nur 4999 Zeilen aus.
Jayhendren
2
Zu den history 1 | grepMenschen, ich hoffe , Sie wissen ctrl+r- die beste Trick / Verknüpfung aller Zeiten!
Emil Vatai
9

Die akzeptierte Antwort ist richtig, aber es ist erwähnenswert, dass Sie nicht brauchen , um die externen Anruf grepdie Suche binär zu tun, da die Fähigkeit , in gebacken habe ich diese Funktion in meinem definiert. .zshrc:

histsearch() { fc -lim "*$@*" 1 }

Anmerkungen:

  • fcist das integrierte zsh, das den interaktiven Verlauf steuert. historyist äquivalent zu fc -l.

  • Die -mFlagge erfordert ein Muster, das in Anführungszeichen gesetzt werden muss.

  • Die -iFlagge fügt einen Zeitstempel hinzu.

  • fchat noch viele weitere Tricks auf Lager (z. B. Beschränkung der Suche auf den internen Verlauf der aktuellen Sitzung). Siehe die zshbuiltins(1)Manpage oder die offizielle Dokumentation .

wjv
quelle
Besser ist es noch, das Muster "* $ @ *" (zusätzliche Sterne beachten) anstelle von "$ @" zu verwenden, da letzteres nur exakte Übereinstimmungen liefert.
Piotr Dobrogost
1
Du hast vollkommen recht, @PiotrDobrogost! Ich bin nicht sicher, wie ich es geschafft habe, diese Antwort in dem Zustand zu übermitteln, in dem ich sie erhalten habe. Ich schätze, ich muss diese Funktion aus dem Speicher eingegeben haben. So wie es aussieht, ist es nicht sehr benutzerfreundlich, deshalb werde ich die Antwort bearbeiten, um die Sternchen einzubeziehen.
wjv
3

Schauen Sie sich fzf an . Es hilft nicht nur, "Was auch immer-Partikel" in Ihrem Shell-Verlauf zu finden, sondern auch an anderen interessanten Orten, z. B. im Browserverlauf, im Verzeichnisverlauf usw.

fzf ist ein Kommandozeilen-Fuzzy-Finder. Das heißt, Sie können nach Partikeln oder Fraktionen suchen, nach denen Sie suchen, und es wird eine Sammlung von Übereinstimmungen angezeigt, die Sie kontinuierlich verfeinern können. Es ist wirklich ein Game Changer.

Die Homepage des Autors enthält einige anschauliche Beispiele.

Daniel Schaffrath
quelle
Erwägen Sie, einen Verweis auf diese Antwort hinzuzufügen, der Ihre Aussage bestätigt.
Pimp Juice IT
Willkommen bei Super User! Bitte lesen Sie Wie Sie Software empfehlen, um die erforderlichen Mindestinformationen und Vorschläge zu erhalten, wie Sie Software für Super User empfehlen können. Damit Ihre Antwort auch dann nützlich bleibt, wenn der / die bereitgestellte (n) Link (s) nicht funktioniert (n), sollten Sie diese Angaben in Ihre Antwort aufnehmen.
Ich sage Reinstate Monica