Find and replace strings in vim on multiple lines
我可以用
如何在vim中选择和替换选择行中的单词?
示例:替换
全部替换:
1 | :%s/foo/bar/g |
查找每个'foo'(在所有行中),并将其替换为'bar'。
对于特定的行:
1 | :6,10s/foo/bar/g |
对于从第6行到第10行的所有行,将每个'foo'更改为'bar'。
1 | :6,10s/<search_string>/<replace_string>/g | 14,18&& |
如果你有很多范围,我宁愿使用一个循环:
1 | :for range in split('6,10 14,18')| exe range 's/<search_string>/<replace_string>/g' | endfor |
作为旁注,只需在其中一种视觉模式中突出显示要查找/替换的行,而不必输入行号:
-
VISUAL 模式(V) -
VISUAL BLOCK 模式(Ctrl + V) -
VISUAL LINE 模式(Shift + V,在您的情况下效果最佳)
选择要替换的行后,键入以下命令:
1 | :s/<search_string>/<replace_string>/g |
您会注意到
1 | :'<,'>s/<search_string>/<replace_string>/g |
这里
请注意,在
1 | :.s/<search_string>/<replace_string>/g |
另外需要注意的是在范围和find / replace命令之间插入第二个
1 2 | :'<,'>:s/<search_string>/<replace_string>/g :.:s/<search_string>/<replace_string>/g |
您可以使用两个查找/替换序列来完成此操作
1 2 | :6,10s/<search_string>/<replace_string>/g :14,18s/<search_string>/<replace_string>/g |
第二次你需要调整的是范围所以不是全部输入,我会记得最后一个命令并只编辑范围
如果您对所有线路都会受到影响感到困惑,请在下方使用
1 | :%s/foo/bar/gc |
将每个'foo'更改为'bar',但首先要求确认。
按'y'表示是,'n'表示否。别忘了在那之后保存
1 | :wq |
VI搜索并替换命令示例
我们假设您想要找到一个名为"foo"的单词并替换为"bar"。
先点击
键入:(冒号)后跟
我们不需要打扰输入当前行号。
如果要将当前行(
1 | :.,+2s/foo/bar/g |
如果要在进行更改之前进行确认,请将
1 | :.,+2s/foo/bar/gc |
通过视觉选择指定范围是可以的,但是如果有的话
简单的操作只需几行就可以选择
运算符最好是将这些命令应用为运算符。
遗憾的是,这不能通过标准的vim命令来完成。你可以做一个排序
解决方法使用! (过滤器)运算符和任何文本对象。对于
例如,要将操作应用于段落,您可以执行以下操作:
1 | !ip |
这必须被解读为"在一个段落中应用操作符!"。过滤器
操作员启动命令模式并自动插入行范围
然后是文字"!"您可以在之后删除。
如果您将此应用于以下段落:
1 2 3 4 5 6 7 8 9 | 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"后的结果如下:
1 | :.,.+5 |
作为'。' (point)表示当前行,当前行之间的范围
行和后面的5行将用于操作。现在你可以添加
替换命令与以前一样。
不好的是,为后者选择文本并不容易
应用运营商。好的部分是这可以重复插入
其他类似文本范围(在本例中为段落)的范围
大小不一样。即,如果您以后想要选择更大的范围
段落'。'会是对的。
此外,如果您喜欢使用语义文本对象来选择
操作范围,你可以检查我的插件
EXtend.vim可以做同样的事情
但是以一种更容易的方式。
1 2 3 4 5 6 7 8 | /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 |
假设您要将上述内容替换为其他信息。
在此,上面将被替换为(