在`vi`中的选择中查找和替换

时间:2009-04-21 15:22:32

标签: vim editor vi replace

如何在vi中的选择中进行查找和替换?

6 个答案:

答案 0 :(得分:79)

此处建议的大多数其他解决方案都适用于选择发生的整个行,这可能不是您想要的。

要仅在选择中搜索和替换,首先直观地选择文本,然后使用如下命令:

:%s/\%VSEARCH/REPLACE/g

这将仅在视觉选择的部分中进行搜索和替换,将SEARCH替换为REPLACE。如果您选择了多行,则这也适用于多行。

答案 1 :(得分:66)

以可视模式选择文本(我假设你正在做的事情),然后按:开始键入命令,你会在命令行中看到这样的内容:

:'<,'>

这意味着该命令将应用于选择。然后输入s/search/replace/并按Enter键。 (如果要替换所有匹配项,请在第三个斜杠后添加g;如果要为每个匹配项添加确认,请添加c

答案 2 :(得分:16)

如果您使用可视模式进行选择,则:

:'<,'>s/regex/replacement/options

如果您从可视模式进入命令行模式(通过按'<,'>),VIM将自动放置范围(':')。

答案 3 :(得分:7)

答案 4 :(得分:2)

Ex命令的范围是按行指定的(请参见*cmdline-ranges*),并且在可视选择范围内按:时,命令行上的行范围将自动指定为{ {1}}(请参阅'<,'>),这使*v_:*命令在整行上运行,除非在搜索模式中用:s[ubstitute]指定了视觉选择边界(请参阅{{1} }),例如\%V仅在视觉选择内匹配“ vim”,其中选择的结尾在搜索模式结束之前指定,因为每个*/\%V*都将下一个字符指定为视觉开始或结束选择,因此/\%Vvi\%Vm将要求视觉选择在“ m”之后继续以匹配“ vim”。请注意,除非必须在视觉选择的边界处或仅在视觉选择的一部分处进行匹配,否则不必在搜索模式中使用第二个\%V

答案 5 :(得分:-3)

如果要对文件中的所有实例执行全局搜索和替换(使用可选的正则表达式),我会执行以下操作:

:%s/foo/bar/g

省略g进行本地替换。