我知道如何在全局或选定区域中搜索和替换字符串。
但我有一个习惯,就是浏览一个单词,然后点击*
搜索该单词。这不仅会搜索单词字符串,还会忽略搜索字符串是其子字符串的其他字符串。所以搜索看起来像\<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建议的那样。