zsh:从其他zsh会话访问历史记录,但只能通过select方法,而不是默认情况下(即反向增量搜索,历史堆栈)

zsh:从其他zsh会话访问历史记录,但只能通过select方法,而不是默认情况下(即反向增量搜索,历史堆栈)

请耐心等待,这不仅仅是关于基本历史控制选项的另一个问题,而且我认为它有一个可靠的用例。

使用案例

我有很多运行实例zshtmux使用 tmux 连续体和复活)。我有这些要求:

  1. 我希望能够为 的每个实例拥有独立的历史记录zsh,这意味着我只希望每个实例zsh在启动时读取全局历史记录文件,而不是在我搜索过去的命令时读取全局历史记录文件(因此,我不想sharehistory设置)。原因是,当我在一个会话中处理工作内容zsh( 中的窗格tmux)时,我不需要来自另一个会话的命令(例如,用于管理我的音乐,甚至来自zsh我的工作“上下文”中的另一个会话) )开始出现在那里。

  2. 但是,有时我在给定的 中zsh,并且不记得在哪个zsh(中的窗格tmux)中运行了所需的命令,而我只想从当前的zsh.因此,我希望能够zsh在命令运行后立即从其他实例访问命令(从全局历史记录),但是仅通过一些替代方式,并且不是使用反向增量历史搜索 ( Ctrl+ R)或在历史堆栈中zshCtrl+ P)。因为这些应该只保留给“本地”历史。

所以解决方案应该从其他实例中找到所需的历史记录zsh,但是Ctrl+R应该不是,历史记录也不应该堆栈在当前的zsh.

研究与尝试

基于此,unsetopt sharehistory需要满足要求 1,并且setopt incappendhistory是要求 2 所需要的一个方面,但这并不是所需要的全部。

history_get_global我可以编写一个grep 的shell 函数~/.zsh_history(因为我有增量历史追加集,所以所有新条目都会在那里)并以某种方式扩展它们,让我选择,但我想知道是否有一种方法可以在本机中执行此操作zsh,无需重新发明轮子。

请注意,如果我执行类似的操作exec $SHELL(用新实例替换 shell),我将获得所有会话的整个共享历史记录(假设inappendhistory已在其中设置),所以我不希望这样:我仍然希望此 shell当我使用作为本问题主题的所需方法时,维护自己独立的历史记录行,并添加其他会话命令的少量内容。也许,即使全局历史记录的使用也不会被推送到本地历史堆栈,因此本地 zsh 历史堆栈将保持隔离。

相关内容