Regex 如何有效地在Vim中搜索并替换为“first”;“测试”;或;预览“;搜索部分?
有时我想在Vim中使用Regex 如何有效地在Vim中搜索并替换为“first”;“测试”;或;预览“;搜索部分?,regex,vim,replace,Regex,Vim,Replace,有时我想在Vim中使用s/search\u for/replace\u with/options格式进行搜索和替换,但是search\u for部分变成了一个复杂的正则表达式,我无法第一次正确地找到它 我在我的中设置了搜索hlsearch。vimrc因此,当我使用/search\u搜索格式时,Vim将在我键入时开始高亮显示。这对于第一次“测试”/“预览”我的正则表达式很有用。然后,一旦我得到了我想要的正则表达式,我就应用于s/进行搜索和替换 但这种方法有两大局限性: 将我在/模式下创建的正则表达
s/search\u for/replace\u with/options
格式进行搜索和替换,但是search\u for
部分变成了一个复杂的正则表达式,我无法第一次正确地找到它
我在我的中设置了搜索hlsearch
。vimrc
因此,当我使用/search\u搜索
格式时,Vim将在我键入时开始高亮显示。这对于第一次“测试”/“预览”我的正则表达式很有用。然后,一旦我得到了我想要的正则表达式,我就应用于s/
进行搜索和替换
但这种方法有两大局限性:
/
模式下创建的正则表达式复制并粘贴到s/
模式很麻烦(
和)
)或在/
中使用魔法模式\v
那么,你们如何在Vim中进行复杂的正则表达式搜索和替换呢?在搜索模式下用
/
测试正则表达式,然后使用s//new\u value/
。当您不向s
的搜索部分传递任何内容时,它将进行最近的搜索
正如@Sam Brink所说,您可以使用
/
粘贴搜索寄存器的内容,因此s////new\u value/
也可以工作。当您有一个复杂的搜索表达式时,这可能更方便。如前所述,您可以在此处使用/your regex/
练习搜索部分。当该功能正常工作时,您可以使用s//replacement/
来使用最新的搜索
完成一次后,您可以使用&
重复上一个s///
命令,即使从那时起您已经执行了不同的搜索。您还可以使用:&g
在当前行全局执行替换。您可以使用:,$&g
搜索此处(
)和文件结尾($
)之间的所有匹配项,以及大量其他可能性
当然,如果操作没有按预期工作,您也可以撤消。正如其他人所指出的,我通常使用
s//replacement/
进行替换,但您也可以使用/
粘贴搜索注册表中的内容。因此,您可以使用s///replacement//
,其中//
将粘贴您的搜索,您可以在最后一分钟进行任何更改
在光标所在的寄存器中插入内容/
寄存器保存最近的搜索项:寄存器
将显示每个寄存器的内容,以便您可以查看可用的内容。由于Neovim 0.1.7具有增量(“live”):替换功能。(所以这只适用于Neovim!)
要启用它,请设置incommand选项:
:set inccommand=split
这里宣布:
/c
很有帮助,让我相信我没有把事情搞砸。我用“撤销”来实现这一点。如果我的搜索模式格式不正确,我将撤消该操作。好的,一旦我使用/
搜索,当我执行s//new\u value/
时,它只替换第一个搜索的值。即使使用s//new_值/g
它仍然只替换第一个值。此外,我似乎无法使用此方法使用匹配的分组正则表达式,如\1
和\2
。C-r
通常也可以从任何寄存器粘贴。感谢您指出这一点,添加了有关
的额外详细信息,以防不明显,:1,$&g
会在每一行上进行替换1,$
表示从第1行到文件末尾。哎呀,我刚刚发现,:%
的意思与:1,$
的意思相同。我以前一直在用它来做:%s/replace/with_this/g
,但没有意识到它的意思。