在多个 zsh shell 中共享历史记录

在多个 zsh shell 中共享历史记录

我正在尝试设置zsh以便它在不同的zsh会话之间共享命令历史记录:

  • 在多个标签页中
  • 在多个 gnome 终端中
  • 在不同的screen会话中

我已经把它放进去了.zshrc

#To save every command before it is executed (this is different from bash's history -a solution):
setopt inc_append_history

#To retrieve the history file everytime history is called upon.
setopt share_history

但那不起作用。

例如,我输入 1 个命令:gedit afile 然后我转到 zsh 并输入history。我没有看到gedit afile

'setopt' 的输出是

 % setopt
nohistbeep
histexpiredupsfirst
histfindnodups
histignorealldups
histignoredups
histignorespace
histnostore
histreduceblanks
histsavenodups
histverify
incappendhistory
interactive
monitor
promptsubst
sharehistory
shinstdin
zle

我怎样才能实现这个目标?

答案1

对你的问题的简单回答是你需要设置share_history,你可以这样做:

setopt share_history

由于您显然已经这样做了(并且该选项确实有效)。我建议您检查:

  • 无论两个都shell 有选项设置;
  • 您是否没有在命令前输入空格(因为histignorespace会使这些命令被忽略)
  • 您是否$HISTFILE在所有 shell 中将其设置为相同的值?
  • 您是否实际保存了任何历史记录?假设您echo 123在 tab-1 中发出。转到 tab-2,调用history。它在那里吗?(根据您的问题,不是)。现在发出,fc -R(意味着重新读取历史文件),然后history它现在在那里吗?如果没有,您可能还想在 tab-1 中调用fc -A-A将强制将您的历史记录附加到文件中)以确保历史记录已写入文件。

答案2

尝试搜索紧迫enter


我测试的是:

  • 打开 2 个 zsh shell
  • 进入 zsh shell 1 并执行echo "something"
  • 进入 zsh shell 2,按enter,然后检查是否看到来自 shell 1 的命令。

就我而言不是enter直到我按下正在搜索的选项卡时才会看到该命令。

答案3

问题可能是你不应该设置INC_APPEND_HISTORY如果你使用SHARE_HISTORY-在zsh 选项文档(搜索“SHARE_HISTORY”)。

...还会导致您输入的命令附加到历史文件中(后者就像指定INC_APPEND_HISTORY,如果此选项有效,则应将其关闭)。

INC_APPEND_HISTORY用于在 shell 之间共享历史记录,同时允许您更好地控制何时导入新的历史记录命令。来自同一文档的一个很好的提示:

如果您发现想要对命令的导入时间进行更多的控制,您可能希望关闭 SHARE_HISTORY,打开 INC_APPEND_HISTORY 或 INC_APPEND_HISTORY_TIME(参见上文),然后在需要时使用“fc -RI”手动导入命令。

相关内容