vi cmdモードzshでキーシーケンスをウィジェットにバインドする方法は?

vi cmdモードzshでキーシーケンスをウィジェットにバインドする方法は?

vicmdモードにバインドしたいとしましょうRredo

これはうまくいきます。

bindkey -a r redo

このように置き換えると動作しません。

bindkey -a rr redo

成功せずにいろいろ試してみました。これは不可能ですか? emacsモードでは、キーストロークにシーケンスをバインドすることが可能である必要があることを知っていますが、viモードで文字に対して同じことを実行できますか?

答え1

Rすでに標準のvicmdモードにバインドされていますvi-replace-chars

Rしたがって、+ Rto redowithを定義すると

bindkey -a rr redo

R押すと、Zshは2つの可能な操作を実行できます。

  1. コマンドとして解釈するvi-replace-chars
  2. 2番目の文字を待ってからコマンドを解釈してください。redo

Zshのキーボードコマンドを一致させるアルゴリズムは短いコマンドを好むので、常に1.タスクを使用します。

RZshがこれを実行するのをやめるには、まず次のようにバインディングを削除する必要があります。

bindkey -a -r r

次に、新しいオプションを追加します。

bindkey -a rr redo

vi-replace-charsその後、追加することもできます。

bindkey -a re vi-replace-chars

関連情報