Terminal

升級 oh-my-zsh 後歷史搜尋損壞

  • April 2, 2014

幾天前我做了 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

游標鍵有兩個事實上的標準轉義序列;不同的終端,甚至是不同模式的同一個終端,都可以發送一個或另一個。例如,xterm在“應用程序游標模式”中發送,\eOA否則。因為你可以同時遇到and等。Up``\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 從終端接收的轉義序列。也許新版本會執行一些不同的終端初始化,以啟用應用程序游標模式。

引用自:https://unix.stackexchange.com/questions/122651