ZSH - sortie de toute l'histoire?

37

Je suis récemment passé de bash à zsh. En bash, une manière (en plus de la recherche récursive) que j’avais l'habitude de trouver des commandes précédemment exécutées était la suivante history | grep whatever: où whateverest le bit de commande dont je me souviens.

En zsh, cela ne fonctionne pas. historyne renvoie que quelques éléments, même si mon .zsh_historyfichier contient de nombreuses entrées pour lesquelles je l'ai configuré.

Comment puis-je sortir toute mon histoire, approprié pour la recherche avec grep?

Nathan Long
la source

Réponses:

48

L’historique accepte une plage dans les entrées zsh en tant [first] [last]qu’arguments, afin de les exécuter toutes history 0.

Pour obtenir l’aide zsh (au moins avec l’esprit), tapez Alt-hsur la commande history, ce qui affichera l’aide des fonctions intégrées.

Kyle Brandt
la source
3
Génial! C'est un défaut ennuyeux pour moi, cependant, alors alias history="history 0"
Nathan Long
7
Ce n’est pas important, mais la liste d’historique commence à 1 et non à 0.
ggustafsson
2
J'utilise moi-même cet alias:alias h='history 1 | grep'
Harald Nordgren le
3
Cela ne semble pas fonctionner pour moi: my ~/.zsh_historya 10066 lignes, mais history 0(ou son équivalent fc -l 0), n'imprime que 4999 lignes.
Jayhendren
2
Pour les history 1 | grepgens, j'espère que vous connaissez ctrl+r- best trick / raccourci jamais!
Emil Vatai
9

La réponse acceptée est correcte, mais il convient de noter que vous n'avez pas besoin d'appeler le grepbinaire externe pour effectuer la recherche, car cette capacité est intégrée. J'ai cette fonction définie dans mon .zshrc:

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

Remarques:

  • fcest la fonction intégrée zsh qui contrôle l’historique interactif. historyest équivalent à fc -l.

  • Le -mdrapeau nécessite un motif, qui doit être cité.

  • Le -idrapeau ajoute un horodatage.

  • fca beaucoup plus d’astuces dans sa manche (par exemple, limiter la recherche à l’historique interne de la session en cours). Voir la zshbuiltins(1)page de manuel ou la documentation officielle .

WJV
la source
Mieux encore, utilisez le motif "* $ @ *" (notez les étoiles supplémentaires) au lieu de "$ @" car ce dernier ne donne que des correspondances exactes.
Piotr Dobrogost
1
Vous avez tout à fait raison, @PiotrDobrogost! Je ne sais pas comment j'ai réussi à envoyer cette réponse dans l'état où je l'ai fait - je suppose que j'ai dû taper cette fonction de mémoire. Dans l'état actuel des choses, il n'est pas très utilisable. Je vais donc modifier la réponse pour intégrer les astérisques.
wjv
3

Regardez fzf . Cela aide non seulement à trouver des "particules" dans l'historique de votre shell, mais également dans d'autres lieux intéressants, tels que l'historique du navigateur, l'historique des répertoires, etc.

fzf est un chercheur fuzzy en ligne de commande. Cela signifie que vous pouvez rechercher des particules ou des fractions de ce que vous recherchez et afficher une collection de correspondances que vous pourrez affiner en permanence. C'est vraiment un changeur de jeu.

La page d' accueil de l'auteur contient un certain nombre d'exemples illustratifs.

Daniel Schaffrath
la source
Pensez à ajouter une référence à cette réponse pour appuyer votre déclaration.
Pimp Juice IT
Bienvenue sur Super User! Veuillez lire Comment recommander un logiciel pour obtenir les informations minimales requises et des suggestions sur la façon de recommander un logiciel sur Super User. Pour que votre réponse reste utile même si le (s) lien (s) fourni (s) est rompu, ces détails doivent être modifiés dans votre réponse.
Je dis: réintégrez Monica