hob*_*es3 10 regex vim replace
有时我想使用s/search_for/replace_with/options
格式在Vim中搜索和替换,但该search_for
部分变成了一个复杂的正则表达式,我第一次无法正确使用.
我有set incsearch hlsearch
我的.vimrc
所以Vim会在我使用/search_for
格式搜索时开始突出显示.这对于首次"测试"/"预览"我的正则表达式非常有用.然后,一旦我得到我想要的正则表达式,我申请s/
搜索和替换.
但这种方法有两个很大的局限性:
/
模式s/
下创建的正则表达式复制并粘贴到模式是一件麻烦事.(
和)
)或使用魔术模式\v
,而在/
.那么你们如何尝试在Vim中进行复杂的正则表达式搜索和替换呢?
Dae*_*yth 16
在搜索模式下测试你的正则表达式/
,然后使用s//new_value/
.如果您没有将任何内容传递给搜索部分s
,则需要进行最近的搜索.
正如@Sam Brink所说,你可以<C-r>/
用来粘贴搜索寄存器的内容,所以s/<C-r>//new_value/
也可以.当您拥有复杂的搜索表达式时,这可能会更方便.
如前所述,您可以练习搜索部分/your-regex-here/
.当它正常工作时,您可以使用s//replacement/
最新的搜索.
完成一次&
后s///
,即使您从那时起进行了不同的搜索,也可以使用重复上一个命令.您还可以使用:&g
在当前行上全局替换.你可以用来:.,$&g
搜索here(.
)和文件末尾()之间的所有匹配$
,以及其他各种可能性.
当然,如果操作没有按预期工作,您也可以撤消.
正如其他人已经注意到我通常s//replacement/
用来做我的替换,但你也可以<C-r>/
用来粘贴搜索寄存器中的内容.所以,你可以使用s/<C-r>//replacement/
其中<C-r>/
将粘贴您的搜索,你可以做任何你想要的最后一分钟的变化.
<C-r>
插入一个寄存器光标所在的内容
的/
寄存器保存最近的搜索词
:registers
会显示每个寄存器的内容,所以你可以看到什么可用.