如何在Vim中的可视模式下对选定行执行特定的正则表达式替换

mspsb9vt  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(151)

我想在vim中复制“突出显示并注解掉代码”(通常绑定到键SHIFT + /)的VS代码特性。
我可以在普通模式下运行:g//s/^/\/\/ /,在每行的开头预先添加//。我只想对此设置一个约束,这样它就只对可视模式下突出显示的行应用替换。

whitzsjs

whitzsjs1#

V选择所有的行,然后点击:,给予:'<,'>,这是你的可视选择范围,然后你可以添加vim命令。
如果您不想使用插件,我建议您使用以下方法。

:'<,'>normal I//

如果你想要一个非常好的vim插件,以vim的方式完成这个任务,看看tpope的vim-commentary,这在我看来是必不可少的。

azpvetkf

azpvetkf2#

我可以在正常模式下运行:g//s/^/\/\/ /,以便在每行的开头预先挂起//
好吧,这将是一个不必要的复杂的方式来做它,你的命令不会真正工作无论如何。

  • :g//要么不匹配,要么匹配上一个搜索。此处您需要的可能是类似:g/^/:g/$/的内容。
  • 对整个缓冲区进行简单的替换会简单得多,也快得多:
:%s/^/\/\/ /

在此上下文中使用:help :global没有任何价值(无论如何,您都希望在每一行上操作),并且速度相当慢(我们说的是慢上千倍)

  • 您可以使用其他分隔符来避免所有反斜杠:
:%s@^@// @
  • 甚至不需要最后一个分隔符:
:%s@^@// <-- there is a space, here
  • 还有一个问题:您可以像在普通模式下一样,通过按:从可视模式进入命令行模式。因此,您只需进行可视选择,按:,然后运行替换:
v                    " enter visual mode
<motion>             " expand the selection
:                    " press :
:'<,'>               " Vim inserts the range covering the visual selection for you
:'<,'>s@^@// <CR>    " perform your substitution

相关问题