vi 替换当前搜索的字符串

rep*_*lay 2 vim

我知道如何在全局或选定区域中搜索和替换字符串。

但我有一个习惯,先浏览一个词,然后点击*搜索那个词。这不仅会搜索单词字符串,还会忽略搜索字符串是其子字符串的其他字符串。所以搜索看起来像\<word\>而不仅仅是word.

现在我希望能够点击*一个单词,然后替换该字符串的所有已搜索和突出显示的出现,而无需为搜索和替换命令再次输入它。有什么好的方法吗?

Sun*_*eep 5

示例文本:

cat
concatenate
scat
dog and cat
Run Code Online (Sandbox Code Playgroud)

*在第一行按下,它将搜索模式\<cat\>

当搜索和替换过程中搜索字符串为空时,它将重用最后匹配的模式,所以这样做

:%s//CAT/g
Run Code Online (Sandbox Code Playgroud)

会导致

CAT
concatenate
scat
dog and CAT
Run Code Online (Sandbox Code Playgroud)


:h :substitute

如果替换命令的 {pattern} 为空,则该命令使用来自最后一个替换或:global命令的模式。如果没有,但有先前的搜索模式,则使用该模式。使用 [r] 标志,该命令使用来自最后一个替换:global、 或搜索命令的模式。


要改变的行为*,并#在视觉选定的文本搜索文本,而不是整个单词中的一部分:

vnoremap * y/<C-R>"<CR>
vnoremap # y?<C-R>"<CR>
Run Code Online (Sandbox Code Playgroud)

  • 请参阅`g*` 或`g#` 以_仅搜索部分文本_ (3认同)