繁体   English   中英

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

[英]How to effectively search and replace in Vim by first “testing” or “preview” the search part?

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

我在我的.vimrc set incsearch hlsearch ,因此当我使用/search_for格式进行搜索时,Vim会在我输入时开始突出显示。 这对于首次“测试”/“预览”我的正则表达式非常有用。 然后,一旦我得到我想要的正则表达式,我就应用于s/来搜索和替换。

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

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

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

使用/在搜索模式下测试正则表达式,然后使用s//new_value/ 当您没有将任何内容传递给s的搜索部分时,它会进行最近的搜索。

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

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

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

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

正如其他人所说,我通常使用s//replacement/来替换,但你也可以使用<Cr>/来粘贴搜索寄存器中的内容。 因此,您可以使用s/<Cr>//replacement/ <Cr>/将粘贴您的搜索,您可以进行任何您想要的最后一分钟更改。

<Cr>插入光标所在的寄存器的内容
/ register包含最新的搜索词
:registers将显示每个寄存器的内容,以便您可以看到可用的内容。

由于Neovim 0.1.7有增量(“实时”):替代功能。 (所以这只适用于Neovim!)

要启用它,请设置incommand选项:

:set inccommand=split

它在这里宣布: https//neovim.io/news/2016/11/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM