我可以用
:5,12s/foo/bar/g
在第5行和第12行之间搜索foo并替换它bar。如何仅在第5行和第12行(而不是在它们之间的行中)执行此操作?
Answers:
您可以在第5行进行替换,并在第12行上进行最少的重复操作:
:5s/foo/bar
:12&
正如Ingo所指出的,:&忘记了您的标志。由于您正在使用/g,正确的命令将是:&&:
:5s/foo/bar/g
:12&&
见:help :&和朋友。
:&使用。如果有标志(s/../../g),则必须使用:&&...
\(\%5l\|\%12l\)比:&
您可以随时c在末尾添加a 。这将要求每场比赛进行确认。
:5,12s/foo/bar/gc
g旗帜)
n5或6次是否比添加\(\%5l\|\%12l\)到替代语句中还要麻烦?
有趣的问题。似乎只有范围选择而没有多行选择:
但是,如果第5行和第12行有一些特殊的地方,则可以使用:g运算符。如果您的文件如下所示(数字仅供参考):
1 line one
2 line one
3 line one
4 line one
5 enil one
6 line one
7 line one
8 line one
9 line one
10 line one
11 line one
12 enil one
而要替换one由eno对那里的线路enil,而不是line:
:g/enil/s/one/eno/
您可以使用ed-面向行的文本编辑器,其命令类似于vi和vim。它可能早于vi和vim。
在脚本(使用此处文档处理输入直到EndCommand标记的脚本)中,它看起来像:
ed file <<EndCommands
5
s/foo/bar/g
7
s/foo/bar/g
wq
EndCommands
显然,ed命令也可以在命令行上使用。
vim替代方案的优势。
:s,但仍然存在:s命令重复(romainl的解决方案避免了)。
sed...