我可以用
:5,12s/foo/bar/g
在第 5 行和第 12 行之间搜索foo
和替换它bar
。我怎样才能只在第 5 行和第 12 行(而不是中间的行)中做到这一点?
Vim 有特殊的正则表达式原子,可以匹配某些行、列等;您可以使用它们(可能除了范围之外)来限制匹配:
:5,12s/\(\%5l\|\%12l\)foo/bar/g
看:help /\%l
您可以在第 5 行进行替换,并在第 12 行以最小的努力重复它:
:5s/foo/bar
:12&
正如 Ingo 所指出的,:&
忘记了你的旗帜。由于您使用/g
的是,正确的命令是:&&
:
:5s/foo/bar/g
:12&&
见:help :&
和朋友。
你总是可以c
在末尾添加一个。这将要求对每场比赛进行确认。
:5,12s/foo/bar/gc
有趣的问题。似乎只有范围选择,没有多行选择:
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
并且您想在有而不是的行上替换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 命令也可以在命令行上使用。