vi 替换当前查找的字符串

vi 替换当前查找的字符串

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

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

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

答案1

示例文本:

cat
concatenate
scat
dog and cat

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

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

:%s//CAT/g

将导致

CAT
concatenate
scat
dog and CAT


:h :substitute

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


要更改视觉选择文本的行为,*#仅搜索文本的一部分而不是整个单词:

vnoremap * y/<C-R>"<CR>
vnoremap # y?<C-R>"<CR>

答案2

您可以使用g*代替*.从:help gstar

g*          Like "*", but don't put "\<" and "\>" around the word.
            This makes the search also find matches that are not a
            whole word.  {not in Vi}

g#          Like "#", but don't put "\<" and "\>" around the word.
            This makes the search also find matches that are not a
            whole word.  {not in Vi}

然后使用:

:%s//replacement/g

正如@Sundeep建议的那样。

相关内容