zsh中的命令历史记录


32

目前,我已经以一种立即在所有会话之间共享命令历史记录的方式设置了zsh。

假设我有一个打开的终端仿真器,其中有两个选项卡,每个选项卡都有一个zsh会话A1和A2。如果我在A1中输入ls -la,然后转到A2并按向上箭头键,我将在命令提示符下看到ls -la

我想更改它,以便会话之间不会共享命令历史记录,尽管当您启动新会话时,它会从之前的所有会话中获取所有先前的历史记录。


我经常这样做。但是,仍有许多问题仍没有令人满意的答案。
艺术

好问题和有用的答案。我认为这特别是iTerm2。如果他们做出相同的假设,希望此评论能够以这种方式发表。
艾伦·

Answers:


40

您可能已经INC_APPEND_HISTORY设定好了。

INC_APPEND_HISTORY选项来自man zshoptions

此选项的工作方式与APPEND_HISTORY相似,不同之处在于,新的历史记录行会(在输入后立即)添加到$ HISTFILE中,而不是等到shell退出后才逐渐添加。

您想要的选项是APPEND_HISTORY

APPEND_HISTORY如果设置此选项,则zsh会话会将其历史记录列表追加到历史记录文件中,而不是替换它。因此,多个并行zsh会话都将按照它们退出的顺序将其历史列表中的新条目添加到历史文件中。当行数比$ SAVEHIST指定的值增加20%时,仍将定期重写文件以修剪文件(另请参见“ HIST SAVE BY COPY”选项)。

你可以阅读有关在这些选项man zshoptionsman zshall或在线在这里

若要设置它们,您~/.zshrc必须具有:

setopt APPEND_HISTORY

请注意,如果您默认情况下使用的是oh-my-zsh,我相信INC_APPEND_HISTORY会使用它。我不确定100%确定加载方式,但是如果该oh-my-zsh选项优先于您设置的加载方式,则可以在其中~/.zshrc进行调整~/.oh-my-zsh/lib/history.zsh


echo unsetopt INC_APPEND_HISTORY >~/.oh-my-zsh/custom/history.zsh
youfu

如何配置iTerm2以在重新启动后还原选项卡的单个历史记录(对于zsh和oh-my-zsh)?
Googol

10

要添加到接受的答案中,如果您使用oh-my-zsh,则可能SHARE_HISTORY默认情况下启用了该选项。

为了在新打开的终端中合并运行中的外壳程序和整个历史记录之间的分隔,您必须注释或删除以下行:

setopt share_history # share command history data

~/.oh-my-zsh/lib/history.zsh


就我而言,history.zsh文件的路径是~/.antigen/repos/https-COLON--SLASH--SLASH-github.com-SLASH-robbyrussell-SLASH-oh-my-zsh.git/lib/history.zsh
suzanshakya '16

3
解决此问题的另一种方法是将unsetopt share_history您的加载.zshrc后的oh-my-zsh内容放入。记录在这里
counterbeing

谢谢@counterbeing为我修复了它-您应该单独回答,这是修复它的最简单方法
jcollum
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.