Regex 如何有效地在Vim中搜索并替换为“first”;“测试”;或;预览“;搜索部分?

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/进行搜索和替换 但这种方法有两大局限性: 将我在/模式下创建的正则表达

有时我想在Vim中使用
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
    ,但没有意识到它的意思。