[英]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/
来搜索和替换。
但这种方法有两个很大的局限性:
/
mode中创建的正则表达式复制并粘贴到s/
mode是一件麻烦事。 (
和)
)或在/
使用魔术模式\\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.