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

カーソルキーには事実上2つの標準エスケープシーケンスがあり、同じ端末の他のモードでもそれらの1つを送信できます。たとえば、xtermは「アプリケーションカーソルモード」など\eOAで送信されます。なぜなら、二つを同時に会えるからです。Up\e[ADown\e[B\eOB

1つの解決策はバインディングをコピーすることです。あるエスケープシーケンスをバインドするたびに、別のエスケープシーケンスを同じコマンドにバインドします。

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

別のアプローチは、常に1つのエスケープシーケンスをバインドし、別のエスケープシーケンスに別のエスケープシーケンスを挿入することです。

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 をアップグレードすると、シェルが端末から受け取るエスケープシーケンスに影響する理由がわかりません。おそらく、新しいバージョンでは、アプリケーションカーソルモードを有効にするために別のターミナル初期化を実行できます。

おすすめ記事