如何通过首先"测试"或"预览"搜索部分来有效地搜索和替换Vim?

hob*_*es3 10 regex vim replace

有时我想使用s/search_for/replace_with/options格式在Vim中搜索和替换,但该search_for部分变成了一个复杂的正则表达式,我第一次无法正确使用.

我有set incsearch hlsearch我的.vimrc所以Vim会在我使用/search_for格式搜索时开始突出显示.这对于首次"测试"/"预览"我的正则表达式非常有用.然后,一旦我得到我想要的正则表达式,我申请s/搜索和替换.

但这种方法有两个很大的局限性:

  1. 将我在/模式s/下创建的正则表达式复制并粘贴到模式是一件麻烦事.
  2. 我不能用正则表达式(即匹配组预览())或使用魔术模式\v,而在/.

那么你们如何尝试在Vim中进行复杂的正则表达式搜索和替换呢?

Dae*_*yth 16

在搜索模式下测试你的正则表达式/,然后使用s//new_value/.如果您没有将任何内容传递给搜索部分s,则需要进行最近的搜索.

正如@Sam Brink所说,你可以<C-r>/用来粘贴搜索寄存器的内容,所以s/<C-r>//new_value/也可以.当您拥有复杂的搜索表达式时,这可能会更方便.


Jon*_*ler 6

如前所述,您可以练习搜索部分/your-regex-here/.当它正常工作时,您可以使用s//replacement/最新的搜索.

完成一次&s///,即使您从那时起进行了不同的搜索,也可以使用重复上一个命令.您还可以使用:&g在当前行上全局替换.你可以用来:.,$&g搜索here(.)和文件末尾()之间的所有匹配$,以及其他各种可能性.

当然,如果操作没有按预期工作,您也可以撤消.


Sam*_*nck 5

正如其他人已经注意到我通常s//replacement/用来做我的替换,但你也可以<C-r>/用来粘贴搜索寄存器中的内容.所以,你可以使用s/<C-r>//replacement/其中<C-r>/将粘贴您的搜索,你可以做任何你想要的最后一分钟的变化.

<C-r>插入一个寄存器光标所在的内容
/寄存器保存最近的搜索词
:registers会显示每个寄存器的内容,所以你可以看到什么可用.