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