我已经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
之前设置的键,或者您也可以为这些目的编写一个类似的小部件。