我可以做:%s/<search_string>/<replace_string>/g替换跨文件的字符串,或:s/<search_string>/<replace_string>/替换当前行。

如何在vim中选择和替换选择行中的单词?

例如:替换第6- 10,14 -18行,而不是第11-13行。


当前回答

在vim中,如果你不清楚哪些行会受到影响,请使用下面的方法

 :%s/foo/bar/gc  

将每个'foo'改为'bar',但要先得到确认。 按“y”表示是,按“n”表示否。之后别忘了保存

:wq

其他回答

&&命令使用相同的标志重复最后一次替换。你可以提供额外的范围(s)到它(和连接尽可能多的你喜欢):

:6,10s/<search_string>/<replace_string>/g | 14,18&&

如果你有很多范围,我宁愿使用循环:

:for range in split('6,10 14,18')| exe range 's/<search_string>/<replace_string>/g' | endfor

通过视觉选择指定范围是可以的,但是当有非常 对象可以选择的几行简单操作 操作符最好是将这些命令作为操作符应用。

遗憾的是,这不能通过标准的vim命令来实现。你可以做排序 的解决方案!(filter)操作符和任何文本对象。为 例如,要将操作应用于一个段落,你可以这样做:

!ip

这必须被理解为“应用运算符!在一个段落里。过滤器 操作符启动命令模式并自动插入行范围 后面跟着一个字面的“!”,你可以在后面删除。 如果你将此应用于以下段落:

1
2  Repellendus qui velit vel ullam!
3  ipsam sint modi! velit ipsam sint
4  modi! Debitis dolorum distinctio
5  mollitia vel ullam! Repellendus qui
6  Debitis dolorum distinctio mollitia
7  vel ullam! ipsam
8
9  More text around here

按“!”Ap”会是这样的:

:.,.+5

作为'。'(点)表示当前线,电流之间的范围 行和后面的5行将用于操作。现在你可以添加 替换命令的方法与前面相同。

不好的部分是,这并不容易选择文本为后者 应用运算符。好的部分是这可以重复插入 的其他类似文本范围(在本例中为段落)的 不同的尺寸。也就是说,如果你以后想要选择更大的范围 段落中的'。“我要把它纠正过来。

此外,如果您喜欢使用语义文本对象来选择 操作范围,你可以检查我的插件 扩展。Vim可以做同样的事情 但是用一种更简单的方式。

替换所有:

:%s/foo/bar/g

找到'foo'(在所有行中)的每个出现,并将其替换为'bar'。

具体线路:

:6,10s/foo/bar/g

将从第6行到第10行的所有行中的每个'foo'更改为'bar'。

在vim中,如果你不清楚哪些行会受到影响,请使用下面的方法

 :%s/foo/bar/gc  

将每个'foo'改为'bar',但要先得到确认。 按“y”表示是,按“n”表示否。之后别忘了保存

:wq

我们不需要输入当前的行号。

如果你想把当前行(.)和接下来的两行(+2)的每个foo更改为bar,简单地做:

:.,+2s/foo/bar/g

如果你想在修改之前确认,用gc替换g:

:.,+2s/foo/bar/gc