zsh history is too short
Solution 1:
NVaughan (the OP) has already stated the answer in an update to the question: history
behaves differently in bash
than it does in zsh
:
In short:
-
zsh:
-
history
lists only the 15 most recent history entries -
history 1
lists all - see below.
-
-
bash:
-
history
lists all history entries.
-
Sadly, passing a numerical operand to history
behaves differently, too:
-
zsh:
-
history <n>
shows all entries starting with<n>
- therefore,history 1
shows all entries. - (
history -<n>
- note the-
- shows the<n>
most recent entries, so the default behavior is effectivelyhistory -15
)
-
-
bash:
-
history <n>
shows the<n>
most recent entries. - (bash's
history
doesn't support listing from an entry number; you can usefc -l <n>
, but a specific entry<n>
must exist, otherwise the command fails - see below.)
-
Optional background info:
- In zsh,
history
is effectively (not actually) an alias forfc -l
: seeman zshbuiltins
- For the many history-related features, see
man zshall
- For the many history-related features, see
- In bash,
history
is its own command whose syntax differs fromfc -l
- See:
man bash
- See:
- Both bash and zsh support
fc -l <fromNum> [<toNum>]
to list a given range of history entries:- bash: specific entry
<fromNum>
must exist. - zsh: command succeeds as long as least 1 entry falls in the (explicit or implied) range.
- Thus,
fc -l 1
works in zsh to return all history entries, whereas in bash it generally won't, given that entry #1 typically no longer exists (but, as stated, you can usehistory
without arguments to list all entries in bash).
- bash: specific entry
Solution 2:
#set history size
export HISTSIZE=10000
#save history after logout
export SAVEHIST=10000
#history file
export HISTFILE=~/.zhistory
#append into history file
setopt INC_APPEND_HISTORY
#save only one command if 2 common are same and consistent
setopt HIST_IGNORE_DUPS
#add timestamp for each entry
setopt EXTENDED_HISTORY
this is my setting, and it work
Solution 3:
Perhaps late however coming across this post and trying to apply it, and failed .... so in practical terms, put this in .zshrc
:
alias history='history 1'
and you'll see anything until the HIST_SIZE
runs out. To find a command I use (after the .zshrc
change)
history | grep "my_grep_string"