问题
When I run history in Bash, I get a load of results (1000+). However, when I run history the zsh shell I only get 15 results. This makes grepping history in zsh mostly useless.
My .zshrc file contains the following lines:
HISTFILE=~/.zhistory
HISTSIZE=SAVEHIST=10000
setopt sharehistory
setopt extendedhistory
How can I fix zsh to make my shell history more useful?
UPDATE
If in zsh I call history 1 I get all of my history, just as I do in Bash with history. I could alias the command to get the same result, but I wonder why does history behave differently in zsh and in Bash.
回答1:
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:
historylists only the 15 most recent history entrieshistory 1lists all - see below.
- bash:
historylists all history entries.
Sadly, passing a numerical operand to history behaves differently, too:
- zsh:
history <n>shows all entries starting with<n>- therefore,history 1shows 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
historydoesn'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,
historyis 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,
historyis 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 1works 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 usehistorywithout arguments to list all entries in bash).
- bash: specific entry
回答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
来源:https://stackoverflow.com/questions/26846738/zsh-history-is-too-short