在特定行中search和replacevim

我可以用

:5,12s/foo/bar/g 

searchfoo并将其replace为第5行和第12行之间的bar 。我怎样才能在第5行和第12行(而不是在第二行)之间做到这一点?

Vim有特定的正则expression式primefaces,它们在某些行,列等中匹配。 你可以使用它们(可能除了范围)来限制匹配:

 :5,12s/\(\%5l\|\%12l\)foo/bar/g 

请参阅:help /\%l

您可以在第5行进行replace,并在第12行上尽可能less地重复:

 :5s/foo/bar :12& 

正如Ingo所指出的:&忘记你的旗帜。 由于您使用的是/g ,所以正确的命令是:&&

 :5s/foo/bar/g :12&& 

请参阅:help :&和朋友。

你总是可以添加一个c到最后。 这将要求确认每场比赛。

 :5,12s/foo/bar/gc 

有趣的问题。 似乎只有范围select,没有多行select:

http://vim.wikia.com/wiki/Ranges

但是,如果你在第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 

而你想在enil而不是lineenil line代替eno

 :g/enil/s/one/eno/ 

你可以使用ed – 一个面向行的文本编辑器,它具有与vi和vim类似的命令。 它可能早于vi和vim。

在一个脚本中(使用一个处理input到EndCommand标记的here文件),它看起来像:

 ed file <<EndCommands 5 s/foo/bar/g 7 s/foo/bar/g wq EndCommands 

显然,ed命令也可以在命令行上使用。