我可以用
: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
旗帜)
n
5或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
...