假设我想在 vicmd 模式下R绑定。redo
这有效。
bindkey -a r redo
如果我把它改成这样,它就不起作用了。
bindkey -a rr redo
我尝试过不同的事情但没有成功。这不可能吗?我知道应该可以在 emacs 模式下将序列绑定到按键,但是您可以在 vi 模式下对字母执行相同的操作吗?
答案1
在标准 vicmd 模式下R已经绑定到vi-replace-chars
.
所以当你定义R+R到redo
with
bindkey -a rr redo
R当按下时,Zsh 可以执行两种可能的操作
- 将其解释为命令
vi-replace-chars
或 - 等待第二个字符,然后解释命令
redo
Zsh 中匹配键盘命令的算法倾向于短命令,因此它将始终使用 1. 操作。
R要阻止 Zsh 执行此操作,您首先需要删除with的绑定
bindkey -a -r r
然后添加您的新选项
bindkey -a rr redo
然后您还可以vi-replace-chars
添加
bindkey -a re vi-replace-chars