我可以用
:5,12s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)
在第5行和第12行之间搜索foo
和替换它bar
.我怎么能只在第5行和第12行(而不是在它们之间的行中)这样做?
Ing*_*kat 60
Vim有特殊的正则表达式原子,在某些行,列等中匹配; 你可以使用它们(可能除了范围)来限制匹配:
:5,12s/\(\%5l\|\%12l\)foo/bar/g
Run Code Online (Sandbox Code Playgroud)
看到 :help /\%l
rom*_*inl 48
您可以在第5行进行替换,并在第12行轻松重复:
:5s/foo/bar
:12&
Run Code Online (Sandbox Code Playgroud)
正如Ingo所指出的,:&
忘记了你的旗帜.由于您正在使用/g
,正确的命令将是:&&
:
:5s/foo/bar/g
:12&&
Run Code Online (Sandbox Code Playgroud)
见:help :&
和朋友.
Dea*_*ean 10
你总是可以添加c
到最后.这将要求确认每场比赛.
:5,12s/foo/bar/gc
Run Code Online (Sandbox Code Playgroud)
有趣的问题.似乎只有范围选择而没有多行选择:
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
Run Code Online (Sandbox Code Playgroud)
并且您希望替换one
为eno
以下行enil
而不是line
:
:g/enil/s/one/eno/
Run Code Online (Sandbox Code Playgroud)