ZSHのviモードでリバース履歴検索を実行するには?

ZSHのviモードでリバース履歴検索を実行するには?

デフォルトでは、すべての編集要件に使用さvimれるため、シェルのviモード(現在のOS Xではoh-my-zshを持つZSH)を再試行することにしましたが、常に試して失敗しましたCtrl-R。同等のキーバインディングとは何ですか?後で参照できるように、この問題を直接解決するにはどうすればよいですか?私はbind -Pこれをbashで使用できると確信しています。

答え1

bindkey引数なしで実行して既存のバインディングリストを取得できます。たとえば、次のようになります。

# Enter vi mode
chopper:~> bindkey -v

# Search for history key bindings
chopper:~> bindkey | fgrep history
"^[OA" up-line-or-history
"^[OB" down-line-or-history
"^[[A" up-line-or-history
"^[[B" down-line-or-history

Emacsモードでは目的のバインディングはありますが、history-incremental-search-backwardviモードではデフォルトではバインドされません。 Ctrl-Rを直接バインドするには、このコマンドを実行するか、次のコマンドに追加できます~/.zshrc

bindkey "^R" history-incremental-search-backward

マンページzshzleman zshzle)には、zsh行エディタ、バインディングキー、およびemacs / viモードに関する詳細情報が含まれています。

答え2

これは古い質問ですが、唯一の(そして受け入れられる)答えは基本的に人々に「emacsに似た」ものをhistory-incremental-search-backwardviモードに移植する方法を教えてくれます。これは完全に実行可能で、あなたにとって適切な解決策かもしれませんが、検索履歴の「vi方式」について誰も言及していないことは少し奇妙です。

zshのviモードは、標準vi / vimキーインとを /使用して履歴検索をサポートします。?どちらもコマンドモードで使用できます。 (<Esc>viやvimなど、挿入モードからコマンドモードに切り替えるにはクリックしてください。)

しかし、その意味は反対です。通常、シェルの履歴を逆/方向に検索しようとするため、逆方向検索が実行され、?順方向検索が実行されます。

最初の一致が表示された後(vi / vimと同様)、n同じ方向にさらに一致を探すことも、検索方向を逆にすることもNできます。

キーマップの関連する主キーバインディングは次vicmdのとおりです。

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search

答え3

下部に以下を追加した~/.zshrcsource ~/.zshrc

bindkey -M vicmd '/' history-incremental-search-backward

関連情報