web-dev-qa-db-ja.com

ZSHで新しいキーバインディングを設定すると、デフォルトのバインディングが削除されます

.zshrcの最後に次のコードを追加しました。

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line

シェルを再起動すると、完全に機能しますが、以前のすべてのキーバインディングが機能しなくなります。

たとえば、履歴を検索できず(CTRL-R)、コマンドラインで移動できません(CTRL-A/E)。

たぶん私はこれらのコマンドを間違った場所に配置しましたか?

どんな助けでも、とても感謝しています!

1
gsscoder

VISUALviを含む文字列に設定すると、zshはVi keymapsvicmdviins、…)を使用します。 Viスタイルのデフォルトのキーバインディング。それ以外の場合、zshはEmacsスタイルのデフォルトのキーバインディングでemacsキーマップを使用します。

シェルでEmacsスタイルのコマンドライン編集を使用したいが、お気に入りのエディターとしてVimを使用したい場合は、 bindkey -e あなたの.zshrc

Viスタイルのコマンドライン編集を使用したいが、Emacsスタイルのデフォルトからのいくつかのバインディングがある場合は、これらのバインディングを自分で定義する必要があります。 ^REmacsモードで実行 history-incremental-search-backward これはViモードではバインドされていません。 Viコマンドモードで検索するためのデフォルトのキーバインディングは/ にとって - vi-history-search-backward および? にとって - vi-history-search-forward 。コマンドラインの最初または最後に移動するには、0^および$ いつものように。