如何重复Vim中的最后n个更改?

时间:2011-07-10 22:25:04

标签: vim repeat

执行.重复上一次更改。执行2.重复最后一次更改两次。

但想象一下,我想在最后一次之前重复这一变化。我怎么在Vim中做到这一点?

3 个答案:

答案 0 :(得分:31)

不要认为可以,请参阅:help .但是,您可以做的是为您的编辑录制宏,您有很多寄存器可供选择{0-9a-zA-Z"}(大写要追加) 。 然后用例如编辑1为@u,编辑2为@t,依此类推。

有关从Best of VIM Tips

录制的重要提示
" Recording (BEST TIP of ALL)
qq  # record to q
your complex series of commands
q   # end recording
@q to execute
@@ to Repeat
5@@ to Repeat 5 times
qQ@qq                             : Make an existing recording q recursive *N*
" editing a register/recording
"qp                               :display contents of register q (normal mode)
<ctrl-R>q                         :display contents of register q (insert mode)
" you can now see recording contents, edit as required
"qdd                              :put changed contacts back into q
@q                                :execute recording/register q

请查看这些内容以获取更多重复提示:

:&     last substitute
:%&    last substitute every line
:%&gic last substitute every line confirm
g%     normal mode repeat last substitute
g&     last substitute on all lines
@@     last recording
@:     last command-mode command
:!!    last :! command
:~     last substitute
:help repeating

答案 1 :(得分:6)

我写了the RepeatLast.vim plugin来解决这个确切的要求。它提供5\.键绑定以重复最后5个更改(包括移动)和2\D以丢弃/忘记最后2个操作。

它的工作原理是始终启用宏录制 ,这可能并不适合所有人。但是,如果你可以忍受它,它在99%的用例中起作用。

最新版本:https://github.com/joeytwiddle/RepeatLast.vim(请反馈!)

  

注意事项:

     

:set ch=2,以便“录制”消息不会隐藏第一行输出。

     

1%的时间无法正常工作通常是由于:

     
      
  1. 难以在不丢失的情况下缓慢触发CursorHold事件   快速重复击键
  2.   
  3. [空间]和。的不良记录   当用户响应提示时,按[Enter]键。
  4.   

从长远来看,训练你的q肌肉以先发制人地记录宏可能是一种更好的方法。 ; - )

答案 2 :(得分:0)

根据Fredrick Phil的回答,这是一个例子:

录制宏

以下显示如何录制宏以删除注册字符串中的所有内容并将其存储在寄存器d中。删除字符串的命令是da"。因此,要将此命令存储在宏寄存器中,我们可以简单地执行此操作:

qdda"q

注意它以q开头和结尾。第二个字符是寄存器,在这种情况下d表示删除。但我们可以给它任何字母或数字。剩下的字符da"是我们的命令。

使用我们的宏

现在我们记录了宏,我们可以使用@符号后跟寄存器来调用它:

@d

重复上一个宏命令

再次使用最近调用的宏命令:

@@