oh-my-zsh 升级后历史记录搜索损坏

oh-my-zsh 升级后历史记录搜索损坏

几天前我做了 oh-my-zsh 的自动升级。现在我的过滤历史记录(输入几个字母和向上箭头)不再起作用。我没有意识到我对它有多么依赖。


编辑:

例如,我曾经输入命令的几个字母,然后按向上箭头来搜索我的历史记录:

➜  scratch git:(develop) up   # press ↑ arrow key

提示更改为:

➜  scratch git:(develop) upupdowndownleftrightleftrightbabastartselect # 3 key presses

我不知道我运行的是什么版本。现在:

➜  scratch git:(develop) echo $ZSH_VERSION
5.0.2

以下是我的 .zshrc 文件中的几行,我认为这些行可以使增量搜索工作:

# Set bindkeys to start search from last word
bindkey '\e[A' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward

答案1

光标键有两个事实上的标准转义序列;不同的终端,甚至同一终端不同模式下,可以发送其中之一。例如,xterm\eOAUp“应用程序光标模式”或\e[A其他方式发送。因为Down你可以同时遇到\e[B\eOB等等。

一种解决方案是复制绑定:每当绑定一个转义序列时,将另一个转义序列绑定到同一命令。

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

另一种方法是始终绑定一个转义序列,并使另一个转义序列注入另一个转义序列。

bindkey '\e[A' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward
bindkey -s '\eOA' '\e[A'
bindkey -s '\eOB' '\e[B'

我不知道为什么升级 oh-my-zsh 会影响 shell 从终端接收的转义序列。也许新版本会执行一些不同的终端初始化,以启用应用程序光标模式。

相关内容