89 votes

ZSH - sortie de toute l'histoire ?

Je suis récemment passé de bash à zsh. Dans bash, un moyen (en plus de la recherche récursive) que j'utilisais pour retrouver les commandes exécutées précédemment était le suivant history | grep whatever , donde whatever est la partie de la commande dont je me souviens.

Dans zsh, cela ne fonctionne pas. history ne renvoie que quelques articles, même si mon .zsh_history contient de nombreuses entrées, ce pour quoi je l'ai configuré.

Comment puis-je produire l'ensemble de mon historique, pour une recherche avec grep ?

126voto

AlexCuse Points 9823

L'historique accepte une plage dans les entrées zsh comme [first] [last] arguments, donc pour les obtenir tous, lancez history 0 .

Pour obtenir l'aide de zsh (au moins avec l'esprit), tapez Alt-h sur la commande history et cela fera apparaître l'aide pour les built-ins.

31voto

wjv Points 931

La réponse acceptée est correcte, mais il est bon de noter que vous ne devez pas besoin de pour appeler l'externe grep binaire pour faire la recherche, puisque cette capacité est intégrée. J'ai défini cette fonction dans mon .zshrc :

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

Notes :

  • fc est le module intégré de zsh qui contrôle l'historique interactif. history est équivalent à fc -l .

  • El -m requiert un motif, qui doit être cité.

  • El -i ajoute un horodatage.

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

Edit (2021-01-27) :

L'un des principaux avantages de cette méthode par rapport à la consultation du fichier d'historique de zsh est qu'elle permet d'obtenir des horodatages lisibles par l'homme par le biais de -i . Bien sûr, cela ne fonctionne que si vous avez activé l'enregistrement des horodatages dans le fichier d'historique en premier lieu :

setopt EXTENDED_HISTORY

Au fil des ans, j'ai également ajouté la fonction -D à ma fonction, qui affiche le temps d'exécution de la commande dans l'historique. (Ceci dépend à nouveau de EXTENDED_HISTORY .) De plus, j'ai renommé la fonction en hgrep ce qui est plus facile à retenir :

hgrep () { fc -Dlim "*$@*" 1 }

5voto

Jetez un coup d'œil à fzf . Il aide non seulement à trouver des "particules quelconques" dans votre historique Shell, mais aussi dans d'autres endroits intéressants, par exemple l'historique du navigateur, l'historique du répertoire, etc.

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

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X