如何在 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
我想在 vim
.
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