デフォルトでは、すべての編集要件に使用さ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-backward
viモードではデフォルトではバインドされません。 Ctrl-Rを直接バインドするには、このコマンドを実行するか、次のコマンドに追加できます~/.zshrc
。
bindkey "^R" history-incremental-search-backward
マンページzshzle
(man zshzle
)には、zsh行エディタ、バインディングキー、およびemacs / viモードに関する詳細情報が含まれています。
答え2
これは古い質問ですが、唯一の(そして受け入れられる)答えは基本的に人々に「emacsに似た」ものをhistory-incremental-search-backward
viモードに移植する方法を教えてくれます。これは完全に実行可能で、あなたにとって適切な解決策かもしれませんが、検索履歴の「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
下部に以下を追加した~/.zshrc
後source ~/.zshrc
bindkey -M vicmd '/' history-incremental-search-backward