Как привязать последовательность клавиш к виджету в vi cmd mode zsh?

Как привязать последовательность клавиш к виджету в vi cmd mode zsh?

Допустим, я хочу выполнить привязку Rв redoрежиме vicmd.

Это работает.

bindkey -a r redo

Если я изменю это на это, это не сработает.

bindkey -a rr redo

Я пробовал разные вещи, но безуспешно. Разве это невозможно? Я знаю, что можно привязывать последовательности к клавишам в режиме emacs, но можно ли сделать то же самое с буквами в режиме vi?

решение1

В стандартном режиме vicmd Rуже привязан к vi-replace-chars.

Итак, когда вы определяете R+ Rto redoс помощью

bindkey -a rr redo

у вас есть два возможных действия, которые Zsh может выполнить при Rнажатии

  1. интерпретировать это как команду vi-replace-charsили
  2. дождитесь второго символа, а затем интерпретируйте командуredo

Алгоритм сопоставления клавиатурных команд в Zsh отдает предпочтение коротким командам, поэтому он всегда будет использовать действие 1.

Чтобы остановить Zsh от этого, вам сначала нужно удалить привязку для Rwith

bindkey -a -r r

а затем добавьте свой новый вариант с помощью

bindkey -a rr redo

Затем вы также можете добавить vi-replace-charsс помощью

bindkey -a re vi-replace-chars

Связанный контент