zsh 中的命令历史记录

zsh 中的命令历史记录

目前我已经设置 zsh,以便命令历史记录可以立即在所有会话之间共享。

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

我想改变它,以便会话不会彼此共享命令历史记录虽然当您开始新会话时,它会获取之前所有会话的所有历史记录。

答案1

你可能已经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

请注意,如果你使用哦我的天啊我认为默认情况下INC_APPEND_HISTORY使用的是。我不确定加载的方式,但如果该oh-my-zsh选项覆盖了你在中设置的选项~/.zshrc,你可以在~/.oh-my-zsh/lib/history.zsh

答案2

为了添加到已接受的答案,如果您使用oh-my-zsh,您可能SHARE_HISTORY默认启用了选项。

为了在新打开的终端中实现正在运行的 shell 和整个历史记录之间的分离,您必须注释或删除以下行:

setopt share_history # share command history data

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

答案3

如果你正在使用哦我的天啊, 添加:

unsetopt share_history

在你的.zshrcoh-my-zsh 已加载(source $ZSH/oh-my-zsh.sh)。

来源致谢

相关内容