ZSH - output whole history?
Solution 1:
History accepts a range in zsh entries as [first] [last]
arguments, so to get them all run history 0
.
To get the zsh help (at least with mind) type Alt-h
over the history command and this will bring up the help for built-ins.
Solution 2:
The accepted answer is correct, but it’s worth noting that you don’t need to call the external grep
binary to do the search, since that ability is baked in. I have this function defined in my .zshrc
:
histsearch() { fc -lim "*$@*" 1 }
Notes:
-
fc
is the zsh builtin that controls the interactive history.history
is equivalent tofc -l
. -
The
-m
flag requires a pattern, which must be quoted. -
The
-i
flag adds a timestamp. -
fc
has many more tricks up its sleeve (e.g. limiting the search to internal history for the current session). See thezshbuiltins(1)
man page or the official documentation.
Edit (2021-01-27):
A major advantage of using this method over just grepping the zsh history file is you get human-readable timestamps via -i
. Of course, this only works if you’ve enabled the saving of timestamps to the history file in the first place:
setopt EXTENDED_HISTORY
Over the years, I’ve also added the -D
flag to my function, which shows the runtime of the command in history. (This is again dependent on EXTENDED_HISTORY
.) Plus, I’ve renamed the function to hgrep
, which I find easier to remember:
hgrep () { fc -Dlim "*$@*" 1 }