我有自定义键盘布局。所以我将vim命令h
,j
,k
和l
绑定到其他字母,例如我已将j
绑定到e
,如下所示:nmap e j
。
问题在于,在操作员暂挂模式下,我有时希望e
表示j
,有时我希望它表示e
。例如,当我按de
时,我希望它表示dj
,但是在按te
时,我希望它表示te
。
有没有办法解决这个问题?
我可以omap de dj
但如果我想通过输入d3e
删除更多行,则无效。如果有(我不这么认为,或者有吗?)某种方式匹配数字,例如#,那么我可以像omap d#e d#j
那样。或者可能有一些方法可以根据我在操作员暂挂模式中输入的内容来更改映射。
答案 0 :(得分:4)
*noremap
,而不是*map
。 nnoremap e j
不可能破坏te
。 onoremap e j
:t
不是运算符,也不会调用运算符挂起模式。omap de dj
与普通模式中按下的de
无关,您应按dde
调用此映射。并且nnoremap e j
与更改de
的含义无关:此处需要onoremap e j
(运算符挂起模式由运算符d
调用,但运算符必须输入正常模式。它都不是调用模式的一部分。)当您需要noremap
,而不需要n
,o
,v
或其他内容时,重新映射基本移动键是极少数情况下的完美示例。尝试做
noremap e j
对于要重新映射的所有键,这应该足够了。
在模式开始时不会重新映射,因此无需执行onoremap 3e 3j
。 onoremap e j
还可以启用d3e
- > d3j
。而noremap e j
相当于
nnoremap e j
onoremap e j
vnoremap e j