
Допустим, я хочу выполнить привязку 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нажатии
- интерпретировать это как команду
vi-replace-chars
или - дождитесь второго символа, а затем интерпретируйте команду
redo
Алгоритм сопоставления клавиатурных команд в Zsh отдает предпочтение коротким командам, поэтому он всегда будет использовать действие 1.
Чтобы остановить Zsh от этого, вам сначала нужно удалить привязку для Rwith
bindkey -a -r r
а затем добавьте свой новый вариант с помощью
bindkey -a rr redo
Затем вы также можете добавить vi-replace-chars
с помощью
bindkey -a re vi-replace-chars