在 zsh 中使用向上和向下箭头搜索历史记录

在 zsh 中使用向上和向下箭头搜索历史记录

当我第一次切换到 ZSH 时,我使用向上箭头键浏览历史记录,它会根据我已经输入的内容过滤历史记录,因此如果我输入mysql然后向上,我将逐步浏览以 开头的最近命令mysql

现在情况已经不同了,现在如果我用完了,它只会执行最近的命令,而不管我已经输入了什么。我该如何重新启用此功能?

我的 .zshrc 非常小,我已经尝试关闭所有选项。

以下是我的 .zshrc 中的内容

plugins=(git command-not-found svn debian screen vi-mode)
source $ZSH/oh-my-zsh.sh

bindkey -v
bindkey "^R" history-incremental-search-backward
export EDITOR="vim"

# history stuff
HISTFILE=~/.zsh-histfile
HISTSIZE=2000

答案1

您已up-line-or-search绑定到向上箭头。这应该会实现您想要的效果:

bindkey '^[[A' up-line-or-search
bindkey '^[[B' down-line-or-search

[编辑]:

上面的命令只使用第一个单词进行搜索。下面的命令将使用整行。参见man zshcontrib...

autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down

答案2

我强烈建议使用"$terminfo[kcuu1]""$key[Up]"而不是硬编码的东西,因为"^[[A"它们可能在任何特定系统上起作用,也可能不起作用。

检查/etc/zsh/zshrc更多键。以下是在我的系统上显示的内容。我认为这些terminfo键更有可能被定义。

key=( BackSpace "${terminfo[kbs]}" Home "${terminfo[khome]}" End "${terminfo[kend]}" Insert "${terminfo[kich1]}" Delete "${terminfo[kdch1]}" Up "${terminfo[kcuu1]}" Down "${terminfo[kcud1]}" Left "${terminfo[kcub1]}" Right "${terminfo[kcuf1]}" PageUp "${terminfo[kpp]}" PageDown "${terminfo[knp]}" )

https://unix.stackexchange.com/a/405358/276872

相关内容