如何在不重新输入Vim的情况下替换刚才搜索到的字符串?

eeq64g8w  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(115)

在vim中,/string是搜索string:s/string/replace是用replace替换string
通过键入/并点击上/下键,可以查看历史搜索。与替换相同。
但是有没有一种方法可以使替换使用搜索的历史,即替换刚刚被搜索过的字符串?
我尝试使用regex将/****ABC****/注解替换为/**** ABC *****/以通过编码风格检查,*的数量是可变的,ABC包含几个单词。
我使用搜索而不是替换来尝试找到正确的正则表达式,它有很多\\*[]
(我想在这里粘贴我的结果,但它不断放大上传图像框...)
我知道我可以把正则表达式复制到其他地方,然后在输入:%s/后粘贴回去,但是如果我使用的是非GUI vim呢?有没有什么特性可以帮助我做到这一点,或者我必须把正则表达式写在纸上?

5lwkijsr

5lwkijsr1#

当搜索模式被省略时,最后一个将被使用。因此,在搜索任何带有“斜杠”的“foobar”之后,您也可以通过指定空搜索模式来“替换”所有的“foobar“。
另外,最后使用的搜索模式是“斜杠”寄存器。所以你可以通过按“ctrl-r”然后按“斜杠”键将其内容输入到命令行中。所有其他与寄存器相关的东西也可以工作。

2ledvvac

2ledvvac2#

如果您使用空的搜索模式(:%s//),它应该使用搜索寄存器中的模式。替代命令的帮助(:h :s,并向下滚动到命令和标志下面的散文)暗示它的工作方式不同:
如果替代命令的{pattern}为空,则该命令将使用上一个替代命令或:global命令中的模式。如果没有模式,但存在上一个搜索模式,则使用该模式。如果使用[r]标志,则该命令将使用上一个替代命令、:global命令或搜索命令中的模式。
也就是说,如果存在最后一个:s模式,它将使用最后一个:s模式,只有在不存在最后一个/search模式时,它才会使用最后一个/search模式,但实际上,它只使用最后一个搜索模式。
您也可以使用<c-r>/(control-r,然后是斜杠),同时将光标放在:%s/命令中的“/”之后,它会将最后一个搜索模式粘贴到命令中。

相关问题