在 Vim 中重复上一个正常模式命令,包括移动

在 Vim 中重复上一个正常模式命令,包括移动

在 Vim 中,使用.,我可以重复上一个正常模式命令;例如:

dd.

删除一行两次。
但是,如果我输入

5j.

光标不会向下移动 10 行。如何重复上一个正常模式命令,尤其是移动?

答案1

即使在 vanilla vim 中也是可行的,但适用性取决于您的使用情况,即您需要多久重复一次,因为它需要更多的击键才能使其可重复。


选项 1:将其变成命令模式操作

以向下移动 5 行为例,你可以执行以下操作:

  1. 输入:norm 5j,它将光标向下移动 5 行
  2. 用来@:重复动作

:norm代表正常,任何后续字符串都被视为正常模式下的按键


选项 2:使用宏

  1. qa(将宏存储到寄存器中a,您可以选择自己的寄存器,如qbqc
  2. 5j
  3. q(录制宏结束)
  4. @a重复您记录的操作(a用您选择的寄存器名称替换,例如@b@c

宏需要更多的精神力量来设置,但它更具可重复性,因为你可以在不同的寄存器中存储多个操作而不会被最新操作覆盖。

答案2

vim不幸的是,这不起作用。你能做的最好的就是安装复制代码插件,重复具有计数的移动命令。

答案3

您可以使用 重复更改.。可以使用 命令重复移动;。此命令似乎是新的,其功能与其他答案中提到的 repmo.vim 脚本类似。

例如,要移至下一个c,请按2fc。然后要再次执行此操作,只需键入;

答案4

您可以选择要更改的行并执行最后一个普通点命令

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'

相关内容