我可以用
:5,12s/foo/bar/g
搜索foo并在第5行和第12行之间用bar替换它。我怎么能只在第5行和第12行(而不在中间的行)这样做呢?
foo
bar
nwlqm0z11#
Vim有特殊的正则表达式原子,在某些行、列等中匹配;您可以使用它们(可能是除了范围之外)来限制匹配:
:5,12s/\(\%5l\|\%12l\)foo/bar/g
参见:help /\%l
:help /\%l
7y4bm7vi2#
你可以在第5行做替换,然后在第12行用最小的努力重复它:
:5s/foo/bar:12&
:5s/foo/bar
:12&
正如Ingo所指出的,:&忘记了你的标志。由于您使用的是/g,因此正确的命令应该是:&&:
:&
/g
:&&
:5s/foo/bar/g:12&&
:5s/foo/bar/g
:12&&
:help :&和朋友们
:help :&
j13ufse23#
你总是可以在末尾添加一个c。这将要求确认每一场比赛。
c
:5,12s/foo/bar/gc
f2uvfpb94#
很有趣的问题。似乎只有范围选择,没有多行选择:http://vim.wikia.com/wiki/Ranges但是,如果你在第5行和第12行有一些特殊的东西,你可以使用:g运算符。如果您的文件看起来像这样(数字仅供参考):你想在有enil而不是line的行上用eno替换one:
:g
enil
line
eno
one
:g/enil/s/one/eno/
lc8prwob5#
你可以使用ed-一个面向行的文本编辑器,它的命令与vi和Vim类似。它可能早于vi和Vim。在一个脚本中(使用一个处理输入直到EndCommand标记的here文档),它看起来像:
ed
ed file <<EndCommands 5 s/foo/bar/g 7 s/foo/bar/g wqEndCommands
ed file <<EndCommands
5
s/foo/bar/g
7
wq
EndCommands
显然,艾德命令也可以在命令行中使用。
5条答案
按热度按时间nwlqm0z11#
Vim有特殊的正则表达式原子,在某些行、列等中匹配;您可以使用它们(可能是除了范围之外)来限制匹配:
参见
:help /\%l
7y4bm7vi2#
你可以在第5行做替换,然后在第12行用最小的努力重复它:
正如Ingo所指出的,
:&
忘记了你的标志。由于您使用的是/g
,因此正确的命令应该是:&&
::help :&
和朋友们j13ufse23#
你总是可以在末尾添加一个
c
。这将要求确认每一场比赛。f2uvfpb94#
很有趣的问题。似乎只有范围选择,没有多行选择:
http://vim.wikia.com/wiki/Ranges
但是,如果你在第5行和第12行有一些特殊的东西,你可以使用
:g
运算符。如果您的文件看起来像这样(数字仅供参考):你想在有
enil
而不是line
的行上用eno
替换one
:lc8prwob5#
你可以使用
ed
-一个面向行的文本编辑器,它的命令与vi和Vim类似。它可能早于vi和Vim。在一个脚本中(使用一个处理输入直到EndCommand标记的here文档),它看起来像:
显然,艾德命令也可以在命令行中使用。