【发布时间】:2010-10-20 20:43:27
【问题描述】:
如何在vi 的选择中进行查找和替换?
【问题讨论】:
如何在vi 的选择中进行查找和替换?
【问题讨论】:
在可视模式下选择文本(我假设你正在这样做),然后按: 开始输入命令,你会在命令行中看到类似这样的内容:
:'<,'>
这意味着该命令将应用于选择。然后输入s/search/replace/ 并回车。 (如果要替换所有匹配项,请在第三个斜杠后添加 g,如果要确认每次替换,请添加 c)
【讨论】:
s/... 中的 s 代表什么?
此处建议的大多数其他解决方案都适用于进行选择的整行,这可能不是您想要的。
要仅在选择中搜索和替换,首先直观地选择文本,然后使用如下命令:
:%s/\%VSEARCH/REPLACE/g
这将仅在视觉选择的部分中进行搜索和替换,将 SEARCH 替换为 REPLACE。如果您选择了多行,这也适用于多行。
【讨论】:
:%s/\%V /\r/g 毫无乐趣。第一个空格被替换,但以下 4 个保持不变。
\%VSEARCH%V 而不仅仅是\%VSEARCH
如果您使用可视模式进行选择,则:
:'<,'>s/regex/replacement/options
如果您从可视模式进入命令行模式(通过按':'),VIM 将自动放置范围('<,'>)。
【讨论】:
< 开始和> 结束的行内的任何位置。也许它可以使它与\%'> 原子一起工作。但我最初的实验失败了。
【讨论】:
Ex 命令的范围是按行指定的(请参阅*cmdline-ranges*),当在有视觉选择的同时按下: 时,命令行上的行范围会自动指定为'<,'>(请参阅*v_:*),这使得 :s[ubstitute] 命令在整行上运行,除非在搜索模式中使用 \%V 指定了视觉选择边界(参见 */\%V*),例如/\%Vvi\%Vm 仅在视觉选择中匹配“vim”,其中选择的结束在搜索模式结束之前指定,因为每个\%V 都指定下一个字符作为视觉选择的开始或结束,因此/\%Vvim\%V 需要在 'm' 之后继续进行视觉选择以匹配 "vim"。请注意,没有必要在搜索模式中使用第二个\%V,除非要求匹配项恰好位于视觉选择的边界或仅部分位于视觉选择中。
【讨论】:
如果您想对文件中的所有实例进行 全局 搜索和替换(使用可选的正则表达式),我会执行以下操作:
:%s/foo/bar/g
省略 g 进行本地替换。
【讨论】: