您如何在zsh中的终端之间共享历史记录?


29

如何实现使每个打开的终端的历史记录中都能看到输入的每个命令?

当打开多个终端时,历史不会共享,即您在一个终端历史中输入的内容不会显示在另一终端中。考虑一下Bash的替代方法 PROMPT_COMMAND="history -a"(它可以在显示提示之前保存历史记录)。


另请参阅相关的和先进的Q&A:superuser.com/questions/446594/...
lumbric

Answers:


36

以下选项将适用:

  • 在执行每个命令之前保存它(这与bash的历史记录-a解决方案不同):

    setopt inc_append_history
    
  • 每次调用历史记录以及来自inc_append_history以下位置的功能时,要读取历史记录文件:

    setopt share_history
    

这些可以在您的.zshrc文件中设置。

与bash相关:


4
“ SHARE_HISTORY:此选项既从历史文件中导入新命令,也使您键入的命令附加到历史文件中(后者类似于指定INC_APPEND_HISTORY,如果此选项有效,则应将其关闭)。” (通过添加手动强调功能),即仅INC_APPEND_HISTORY选项即可满足您的需求。
artfulrobot 2014年

3
实际上,仅SHARE_HISTORY选项就能满足您的需求。短语“如果此选项有效,应将其关闭”翻译为“如果[SHARE_HISTORY]选项有效,则应关闭[INC_APPEND_HISTORY]”。我已经在Ubuntu Xenial的zsh 5.1.1上对此进行了测试。
Linus Arver

1
@opert是正确的:setopt share_history将完成预期的结果。@MJB您愿意编辑您的答案以删除提及setopt inc_append_history吗?它掩盖了实际答案。
bonh

名称不区分大小写,下划线将被忽略,因此如果您setopt | grep hist将获得incappendhistoryandsharehistory
Pablo A

4

如果您使用罗比·罗素(Robby Russell)出色的OhMyZSH,它将为您提供更多服务。

参见https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/history.zsh

其中包括setopt inc_append_history


是他/她/自己的。对于外壳工作很重要。
Cees Timmerman

@CeesTimmerman已修复,谢谢。我认为总体上来说,沟通很重要。“重要的外壳工作”是什么意思?
james_womack

1
外壳中的错字可能会破坏整个系统。
Cees Timmerman
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.