zsh历史去重需配置setopt hist_ignore_dups(跳过相邻重复)或hist_ignore_all_dups(全局去重),并配合inc_append_history和share_history实现即时写入与多终端同步。
zsh 默认会记录每条命令,包括连续重复输入的同一命令。要让历史中只保留一份,关键在于启用去重选项,并配合合理的写入策略。
启用基础去重:HIST_IGNORE_DUPS
这是最常用、最直接的方式,它会忽略与上一条完全相同的命令:
- 在 ~/.zshrc 中添加:
setopt HIST_IGNORE_DUPS - 效果:连续执行
ls五次,历史里只存一次 - 注意:它只对比相邻命令,不扫描整个历史
全局去重:HIST_IGNORE_ALL_DUPS
比上一个更强,每次写入前检查整个历史,确保完全不重复:
- 添加配置:
setopt HIST_IGNORE_ALL_DUPS - 效果:哪怕中间隔了其他命令,只要出现过,再次输入也不会重复记录
- 适合追求极简历史、讨厌冗余的用户
配合实时写入与附加模式
单独去重还不够,得让去重真正生效——需确保命令及时写入并覆盖旧记录:
- 启用增量追加:
setopt INC_APPEND_HISTORY
(输入后立刻追加到文件,而非退出时才写) - 启用共享历史:
setopt SHARE_HISTORY
(多个终端窗口间同步去重后的结果) - 避免手动修改历史文件破坏逻辑,所有操作通过
history -d或配置控制
可选增强:忽略空格开头的命令
有些命令你明确不想留痕(比如含密码的 curl),可在前面加空格跳过记录:
- 启用该机制:
setopt HIST_IGNORE_SPACE - 使用示例:
git commit -m "done"(开头有空格,不进历史) - 注意:需确保终端支持该行为,部分 iTerm2 配置可能影响











