如何让 ZSH 共享历史记录发挥作用?

如何让 ZSH 共享历史记录发挥作用?

我已经setopt share_history设置set opt inc_append_history在我的~/.zshrc。这是几乎在职的。

在会话 1 中,我执行一个命令,它被写入历史记录。

在会话 2 中,按下箭头时看不到命令UP​​,直到执行history。执行后history命令才会显示。

当我按下箭头时,如何才能立即显示历史记录UP

答案1

当。。。的时候Z壳显示提示符,它处于空闲状态,恕我直言,它不执行任何后台任务。因此,只有在呈现新提示符时才会重新读取历史记录文件。这就是为什么在终端中$HISTFILE按下 来重新读取历史记录是足够的,但也是必要的。ENTER

如果你想保存这个额外的按键,你可以使用以下命令zle 小部件在你的~/.zshrc

up-line-or-history-reread() {
        [[ -z $BUFFER ]] && fc -R $HISTFILE
        zle up-line-or-history
}
zle -N up-line-or-history-reread
bindkey '^[[A' up-line-or-history-reread

这个新小部件与 绑定UP ARROW,检查当前命令行是否为空,如果是,则重新读取历史记录。之后,它将调用默认小部件 ( up-line-or-history)。

与默认行为相比,这种方法至少有以下两个缺陷:

  • 如果你在历史记录中拖拽了几条命令,并删除了整个命令行,下次按下时UP ARROW将从命令历史记录的末尾重新开始。
  • 如果您使用其他历史机制,例如历史搜索,您仍然需要按下ENTER之前设置的键,或者您也可以为这些目的编写一个类似的小部件。

相关内容