zsh 中的命令历史记录

Art*_*Art 45 zsh command-history

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

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

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

sim*_*ont 54

你可能已经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
Run Code Online (Sandbox Code Playgroud)

请注意,如果您默认使用oh-my-zsh,我相信INC_APPEND_HISTORY会使用。我不是 100% 确定加载内容的方式,但是如果该oh-my-zsh选项覆盖了您在 中设置的选项~/.zshrc,您可以在~/.oh-my-zsh/lib/history.zsh


Ada*_*ski 16

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

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

setopt share_history # share command history data
Run Code Online (Sandbox Code Playgroud)

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

  • 另一种方法是在加载 `oh-my-zsh` 后将 `unsetopt share_history` 放在你的 `.zshrc` 中。记录在 [此处](https://github.com/robbyrussell/oh-my-zsh/issues/2537)。 (6认同)