在 Vim 中不仅重复最后一次更改,还重复其他更改

在 Vim 中不仅重复最后一次更改,还重复其他更改

我怎样才能重复上次使用的修改(。)以及更多之前的修改?

完美的变体是通过Ctrl+NCtrl+选择它们P

答案1

为了扩展@ldigas 关于记录和宏的评论,这里有一个简单的细分。

  1. 按下q进入“录音”模式。
  2. 按下您想要“命名”宏的键,我通常用于w一次性使用的宏,但您可以使用任何您想要的字母。
  3. 执行您想要重复的操作。
  4. 按下q停止录音。

一旦您有了宏,您就可以使用@w(假设您使用了w)重播它,它将滚动执行您记录的操作。

答案2

我不建议重新映射 CN 和 CP,因为它们是自动完成映射,插件经常使用它们。事实上,我不建议重新映射任何 vim 的默认映射。但无论如何,这取决于你。

至于重复,点 (.) 将重复您在上一行执行的操作。如果您在某些插件中使用重复命令时遇到问题,请尝试重复.vim插入。

如果您希望使用一些经常使用的操作,请尝试将其记录在寄存器中,然后播放它(“:help record”),或者使其成为一个函数,然后调用该函数(如果您愿意,我猜可以作为 CN 或 CP 调用函数...)

答案3

再次扩展对要重复的命令的映射:
当您无需视觉反馈就知道要重复的内容时,此 [ Ctrl- ]Space映射可节省另外几个击键:

" map in Normal and Visual modes, but not Select mode (see :help mapmode-x
:command -nargs=*  Nxmap      nmap     <args>| xmap     <args>
     com -nargs=*  Nxnoremap  nnoremap <args>| xnoremap <args>
     com -nargs=*  Nxunmap    nunmap   <args>| xunmap   <args>

" map <Space> to currently often-used operations (similar to space.vim)
    " quickly create custom mappings
        " Usage: <C-Space>YOURMAPPING<Enter> and then just <Space> for each repetition
        " (When you know without visual feedback what you want to repeat, this saves another few keystrokes.)
    Nxmap <C-Space> :Nxmap <lt>Space> 

    " make these commands repeatable by <Space> (similar to space.vim)
    let space_repeats_nx = ['@@','@:']
        for cmd in space_repeats_nx
            exe 'Nxnoremap '.cmd.' :Nxnoremap <lt>Space> 'cmd.'<CR>'.cmd
        endfor

答案4

我做了重复最后一步.vim插件来提供此功能5\.

它通过启用宏录制来工作每时每刻。因此我并不推荐它!但我发现这是唯一可以回顾性地执行多次重复的方法。如果 Vim 可以在内部提供对最近击键的访问,那就太好了。

q最好记住在执行想要重复的操作之前先击打。

相关内容