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

JHo*_*JHo 4 keyboard-shortcuts zsh terminal oh-my-zsh

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

\n\n
\n\n

编辑:

\n\n

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

\n\n
\xe2\x9e\x9c  scratch git:(develop) up   # press \xe2\x86\x91 arrow key\n
Run Code Online (Sandbox Code Playgroud)\n\n

提示更改为:

\n\n
\xe2\x9e\x9c  scratch git:(develop) upupdowndownleftrightleftrightbabastartselect # 3 key presses\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

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

\n\n
\xe2\x9e\x9c  scratch git:(develop) echo $ZSH_VERSION\n5.0.2\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
# Set bindkeys to start search from last word\nbindkey '\\e[A' history-beginning-search-backward\nbindkey '\\e[B' history-beginning-search-forward\n
Run Code Online (Sandbox Code Playgroud)\n

Gil*_*il' 5

光标键有两个事实上的标准转义序列;不同的终端,甚至同一终端不同模式下,可以发送其中之一。例如,xterm在 \xe2\x80\x9capplication 光标模式\xe2\x80\x9d 等中\\eOA发送。因为你可以同时遇到和等等。Up\\e[ADown\\e[B\\eOB

\n\n

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

\n\n
bindkey '\\eOA' history-beginning-search-backward\nbindkey '\\e[A' history-beginning-search-backward\nbindkey '\\eOB' history-beginning-search-forward\nbindkey '\\e[B' history-beginning-search-forward\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
bindkey '\\e[A' history-beginning-search-backward\nbindkey '\\e[B' history-beginning-search-forward\nbindkey -s '\\eOA' '\\e[A'\nbindkey -s '\\eOB' '\\e[B'\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n