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


25

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

dd.

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

5j.

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

Answers:


14

vim不幸的是并没有这样做。最好的办法是安装repmo.vim插件,该插件重复具有计数的运动命令。


11

即使在普通vim中它也是可行的,但是适用性取决于您的用例,即。您需要多久重复一次,因为它只需几次击键即可使其重复。


选项1:将其转换为命令模式操作

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

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

:norm 代表正常,在正常模式下,以下任何字符串均视为您的击键


选项2:使用宏

  1. qa(宏保存到寄存器a,你可以挑选自己喜欢的寄存器qbqc
  2. 5j
  3. q (完成录制宏)
  4. @a重复录制的操作(替换a用您挑选的注册名称,例如。@b@c

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


7

实际上是.重复最后一次更改,而不是最后一次普通模式命令。如Paul所说,您将需要一个插件来重复动作。

参见“ :help .”。


4

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

例如,要移至第二个c,请按2fc。然后再做一次,只需输入;


11
;不新鲜。这是标准的vi命令。VI记住最后的类型和目标字符(但不是数值参数)f/ F/ t/ T运动和;重复它。但是,它不会重复其他动作。
–pyrocrasty

这完成了我想要做的事情!谢谢。并感谢@pyrocrasty的澄清!
保罗

0

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

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.