如何在 vim 中以可视模式在选定行上执行特定的正则表达式替换

How to execute specific regex substitution on selected lines in visual mode in vim

我想在 vim.

中复制 'highlight and comment out code' 的 VS 代码功能(通常绑定到键 SHIFT + /

我可以在正常模式下 运行 :g//s/^/\/\/ / 在每一行的开头添加 // 。我只是想对此施加约束,以便它仅将替换应用于在视觉模式下突出显示的行。

目测 select 所有行(使用 V),然后点击 :。 这会给你 :'<,'> 这是你的视觉 selection 的范围。 然后你可以将你的vim命令添加到它。

如果你不想使用插件,我会推荐以下方法。

:'<,'>normal I//

这不是替代。 如果您想要一个非常好的 vim 插件以 vim 方式完成此任务,请查看 tpope 的 vim-commentary,我认为这是必不可少的。

I can run :g//s/^/\/\/ / in normal mode to prepend // at the start of every line.

好吧,那将是一种不必要的复杂方法,而且您的命令无论如何也不会真正起作用。

  • :g// 要么什么都不匹配,要么匹配上一个搜索。您在这里想要的可能是 :g/^/:g/$/.

  • 对整个缓冲区进行简单替换会更简单、更快:

    :%s/^/\/\/ /
    

    在此上下文中使用 :help :global 没有任何价值(无论如何你都想对每一行进行操作)并且速度相当慢(我们说的慢了数千倍)

  • 您可以使用替代分隔符来避免所有反斜杠:

    :%s@^@// @
    
  • 甚至不需要最后一个分隔符:

    :%s@^@// <-- there is a space, here
    
  • 更重要的是:您可以通过按 : 从可视模式进入 command-line 模式,就像在正常模式下一样。因此,您可以简单地进行视觉选择,按 :,然后按 运行 进行替换:

    v                    " enter visual mode
    <motion>             " expand the selection
    :                    " press :
    :'<,'>               " Vim inserts the range covering the visual selection for you
    :'<,'>s@^@// <CR>    " perform your substitution