在特定行中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
而不是line
的enil
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命令也可以在命令行上使用。