私は基本的にすべての編集ニーズにvim
を使用しているので、シェル(現在はOS Xのoh-my-zshを使用したZSH)で再びviモードを試すことにしましたが、失敗する)Ctrl-R
常に。同等のキーバインドとは何ですか?そして、今後の参考のために、これを自分でどのように理解できるでしょうか? bind -P
bashで。
引数なしで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のラインエディター、bindkey、emacs/viモードに関する詳細情報があります。
これは古代の質問ですが、唯一の(そして受け入れられた)答えは、基本的に「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