Zsh 中的历史记录设置
内容提要
如果您使用zsh,可能已经将其与oh-my-zsh捆绑在一起,后者在zsh配置下做了很多工作。但是,当我切换到starship时,我花了一些时间才弄清楚如何在没有oh-my-zsh的情况下正确设置zsh的历史记录。如果您使用的是MacOS,您会注意到一切仍然正常,这是因为/etc/zshrc中有一个系统范围的历史记录设置。但是如果您使用的是Linux,您需要自己设置。没有任何配置,命令历史记录只会在当前会话中可用,并且在关闭会话后将丢失。为了获得更好的体验,有三个选项:setopt appendhistory、setopt inc_append_history和setopt share_history。除了上述选项之外,您还需要添加一些其他配置:HISTFILE和SAVEHIST。
延伸解读
macOS 与 Linux 的默认差异
文章指出,macOS 的 /etc/zshrc 中已有系统级历史记录设置,因此用户可能感觉一切正常;而 Linux 没有这个默认配置,需要用户自行设置。这提醒 Linux 用户,在未配置时,命令历史仅限当前会话,关闭终端后就会丢失,且不同会话之间不共享。
三种历史记录选项的适用场景
setopt appendhistory 在会话关闭时才追加历史,不够及时;setopt inc_append_history 让命令立即写入历史文件,其他会话可读,但当前会话无法读取其他会话的历史;setopt share_history 同时写入和读取更新,作者认为是最佳选择。读者可根据对实时性和会话间共享的需求选择。
历史记录读取的注意事项
文章提醒,要读取历史记录需要触发 history 命令,因此像 CTRL-R 配合 Fzf 这样的操作可能无法直接使用。这意味着即使配置了 share_history,某些依赖实时读取历史的工具或快捷键可能不会按预期工作,需要额外调整或适应。
关键配置项及其关系
除了 setopt 选项,还需设置 HISTFILE(历史文件路径,通常为 ~/.zsh_history)、SAVEHIST(文件中保存的最大行数)和 HISTSIZE(内存中保留的最大行数)。HISTSIZE 通常与 SAVEHIST 相同,也可以更大,但不能更小,因为无法保存超过内存中已有的记录。
Q&A
如何在Linux上设置zsh的历史记录?
在Linux上,您需要手动配置历史记录,默认情况下历史记录仅在当前会话中可用,关闭后会丢失。
zsh的历史记录选项有哪些?
zsh提供三个选项:setopt appendhistory、setopt inc_append_history和setopt share_history。
setopt share_history的作用是什么?
setopt share_history不仅写入历史,还读取历史以进行更新,是最佳选择。
如何设置历史文件的路径?
您可以通过配置HISTFILE来设置历史文件的路径,通常为~/.zsh_history。
zsh中如何保存历史记录的行数?
使用SAVEHIST可以设置保存的历史行数,通常可以设置为一千或更多。
在zsh中如何读取历史记录?
在zsh中,您可以使用history命令来读取历史记录,CTRL-R等操作无法使用。