![zsh 中的无限历史记录](https://linux22.com/image/86818/zsh%20%E4%B8%AD%E7%9A%84%E6%97%A0%E9%99%90%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95.png)
在zsh
,我想要拥有无限的历史。我设置了HISTSIZE=
,它适用于bash
.现在我导入旧历史
mv old_history .history
这是相当大的
wc -l .history
43562 .history
如果我现在关闭并zsh
重新开始,我会明白
wc -l .history
32234 .history
我不能拥有无限的历史记录zsh
吗?
答案1
您的机器有其局限性和可能性。
HISTFILE="$HOME/.zsh_history"
HISTSIZE=10000000
SAVEHIST=10000000
setopt BANG_HIST # Treat the '!' character specially during expansion.
setopt EXTENDED_HISTORY # Write the history file in the ":start:elapsed;command" format.
setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits.
setopt SHARE_HISTORY # Share history between all sessions.
setopt HIST_EXPIRE_DUPS_FIRST # Expire duplicate entries first when trimming history.
setopt HIST_IGNORE_DUPS # Don't record an entry that was just recorded again.
setopt HIST_IGNORE_ALL_DUPS # Delete old recorded entry if new entry is a duplicate.
setopt HIST_FIND_NO_DUPS # Do not display a line previously found.
setopt HIST_IGNORE_SPACE # Don't record an entry starting with a space.
setopt HIST_SAVE_NO_DUPS # Don't write duplicate entries in the history file.
setopt HIST_REDUCE_BLANKS # Remove superfluous blanks before recording entry.
setopt HIST_VERIFY # Don't execute immediately upon history expansion.
setopt HIST_BEEP # Beep when accessing nonexistent history.
来自ZSH 邮件列表:
您应该确定您有多少内存,可以允许历史记录占用多少内存(据我所知,它总是完全加载到内存中)并采取相应的行动。消除限制并不明智,因为它会让您认为没有限制,但总是受到可用资源的限制。
或者,如果您认为不会遇到资源耗尽的问题,您可以从 limit.h 将 HISTSIZE 设置为 LONG_MAX:这是 HISTSIZE 可以拥有的最大数量。
其中解释了 Gentoo 解决方案:
export HISTSIZE=2000
export HISTFILE="$HOME/.history"
如果没有以下命令,历史记录将不会被保存:
export SAVEHIST=$HISTSIZE
为了防止历史记录重复的条目(例如在单个 shell 会话期间多次输入 ls -l),可以设置 hist_ignore_all_dups 选项:
setopt hist_ignore_all_dups
这是一种有用的技巧,可以通过在特定条目前面添加至少一个空格来防止将其记录到历史记录中。
setopt hist_ignore_space
答案2
答案3
我一直对历史记录有限制,10000
直到我意识到 oh-my-zsh 正在设置自己的HISTSIZE
值SAVEHIST
。 TL;DR,请确保将这些行放在.zshrc
.
我遇到的另一个问题是我的历史记录被截断为 1024 行。虽然我不确定为什么,但我通过以下方法解决了这个问题:
- 设置
HISTFILE=$HOME/.zsh_hist
(与以前不同的东西) - 明确设置
HISTFILE=$HOME/.bash_history
在~/.bashrc
- 进行正常设置,例如
HISTSIZE=100000
和SAVEHIST=100000
我认为这可能与我使用export
set相关,这导致 bash在从 ZSH 交互启动时HISTFILE
使用相同的变量,这会截断它。HISTFILE
只要您确保不这样做,设置 bash 历史文件可能就没有必要export
HISTFILE
。
答案4
问题不在于zsh
我.zshrc
,而在于我的历史。有一些奇怪的条目,比如
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@#1453692179
这很混乱zsh
,这些条目之后的所有内容都被截断了。我不知道^@
对应的字符是什么,也不知道这些条目如何出现在我的历史记录中,但删除它们解决了问题。