扩展 Vim 映射以运行 N 次

扩展 Vim 映射以运行 N 次

我希望能够在正常模式下输入类似“Ncom”的内容,它将注释掉当前行和接下来的 N-1 行。我为此设置的键映射是。 :nmap com ^i#<ESC>j这确实会注释掉当前行,但它对 N 行的作用与内置 vim 命令不同。我需要了解哪些有关 vim 的知识才能解释我希望发生的事情和实际发生的事情之间的差距?此外,我如何才能正确实现我想要的东西?

答案1

:nnoremap com :normal! I#<CR>

解释…

  • I与 相同^i但更好。通常,您应该执行以下操作来代替^i#<Esc>

    I#<Esc>
    

    $a顺便说一下,也是一样。

  • :normal是一个 Ex 命令,它允许您从命令行运行正常模式命令。它的用法如下,后跟<CR>

    :normal! I#
    
  • 当普通模式命令前面加上count:时6w,该命令将执行 6 次。但是, 不会count传播到后续命令:6wifoo不会foo在接下来 6 个单词之前添加。根据命令的不同,规则可能会有所不同:如果您不确定,请查阅文档。

  • 当 Ex 命令前面加上count: 时6:command,Vim 会自动添加一个范围,从当前行开始到下面的第 行结束count-1。如果你这样做6:normal! I#,命令将变成:

    :.,.+5normal! I#
    

    意思是“#在这一行以及下面 5 行的第一个可打印字符前插入一个”。

  • 当 Vim 在映射中遇到带有 的 Ex 命令时,:它始终会添加相关范围。这就是为什么最好在:normal要在多行上使用的映射中使用 或带有 的原因count

参见:help range:help :normal

答案2

我认为这个插件可以完成这个工作:https://github.com/tpope/vim-repeat

例子:

silent! call repeat#set("\<Plug>MyWonderfulMap", v:count)

相关内容