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

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

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


当前回答

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

遗憾的是,这不能通过标准的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可以做同样的事情 但是用一种更简单的方式。

其他回答

您可以使用两个查找/替换序列来完成此操作

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

第二次你需要调整的是范围,所以我不会把它全部敲出来,我会回忆起最后一个命令,只编辑范围

作为旁注,不必输入行号,只需突出显示你想要在其中一种可视模式中查找/替换的行:

视觉模式(V) VISUAL BLOCK模式(Ctrl+V) 视觉线模式(Shift+V,在你的情况下工作最好)

选择要替换的行后,键入命令:

:s/<search_string>/<replace_string>/g

你会注意到范围'<,'>会自动为你插入:

:'<,'>s/<search_string>/<replace_string>/g

这里'<仅仅表示第一行突出显示,'>表示最后一行突出显示。

注意,在NORMAL模式下,这种行为可能是意外的:'<和'>指向在其中一个VISUAL模式下最后一次高亮的开始和结束。相反,在NORMAL模式下,是特殊的行号。可以用,简单地说就是当前行。因此,你只能在当前行中查找/替换,就像这样:

:.s/<search_string>/<replace_string>/g

另一件需要注意的事情是,在range和find/replace命令之间插入第二个:没有伤害,换句话说,这些命令仍然有效:

:'<,'>:s/<search_string>/<replace_string>/g
:.:s/<search_string>/<replace_string>/g

搜索和替换

:%s/search\|search2\|search3/replace/gci

G =>全局搜索

先请求确认

i =>不区分大小写

如果您想直接更换,无需确认,请使用以下命令

:%s/search/replace/g

如果你想确认每次替换,那么运行下面的命令

:%s/search/replace/gc

请先确认,这里的搜索不区分大小写。

:%s/search/replace/gci
/sys/sim/source/gm/kg/jl/ls/owow/lsal
/sys/sim/source/gm/kg/jl/ls/owow/lsal
/sys/sim/source/gm/kg/jl/ls/owow/lsal
/sys/sim/source/gm/kg/jl/ls/owow/lsal
/sys/sim/source/gm/kg/jl/ls/owow/lsal
/sys/sim/source/gm/kg/jl/ls/owow/lsal
/sys/sim/source/gm/kg/jl/ls/owow/lsal
/sys/sim/source/gm/kg/jl/ls/owow/lsal

假设你想用其他信息替换上面的内容。

命令(:% s / \ / sys \ / sim源\ \ / /通用\ \ / jl \ /公斤/ ls \ / owow \ / lsal / sys.pkg.mpu.umc.kdk. / g)

在这里,上面的内容将被替换为(sys.pkg.mpu.umc.kdk.)。

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

遗憾的是,这不能通过标准的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可以做同样的事情 但是用一种更简单的方式。