根据已输入的内容,以不同方式映射字母

时间:2012-05-30 18:46:19

标签: vim

我有自定义键盘布局。所以我将vim命令hjkl绑定到其他字母,例如我已将j绑定到e,如下所示:nmap e j

问题在于,在操作员暂挂模式下,我有时希望e表示j,有时我希望它表示e。例如,当我按de时,我希望它表示dj,但是在按te时,我希望它表示te

有没有办法解决这个问题?

我可以omap de dj但如果我想通过输入d3e删除更多行,则无效。如果有(我不这么认为,或者有吗?)某种方式匹配数字,例如#,那么我可以像omap d#e d#j那样。或者可能有一些方法可以根据我在操作员暂挂模式中输入的内容来更改映射。

1 个答案:

答案 0 :(得分:4)

  1. 您不应该考虑使用*noremap,而不是*map
  2. nnoremap e j不可能破坏teonoremap e jt 不是运算符,也不会调用运算符挂起模式。
  3. omap de dj普通模式中按下的de无关,您应按dde调用映射。并且nnoremap e j与更改de的含义无关:此处需要onoremap e j(运算符挂起模式由运算符d调用,但运算符必须输入正常模式。它都不是调用模式的一部分。)
  4. 当您需要noremap,而不需要nov或其他内容时,重新映射基本移动键是极少数情况下的完美示例。尝试做

    noremap e j
    

    对于要重新映射的所有键,这应该足够了。

  5. 在模式开始时不会重新映射,因此无需执行onoremap 3e 3jonoremap e j还可以启用d3e - > d3j。而noremap e j相当于

    nnoremap e j
    onoremap e j
    vnoremap e j