我可以使用
在第5行和第12行之间搜索
:5,12s/foo/bar/g
在第5行和第12行之间搜索
foo
并将其替换为bar
。我该如何只在第5行和第12行(而不是它们之间的行)进行替换?Vim有特殊的正则表达式原子,用于匹配特定的行、列等;你可以使用它们(可能是在范围之外)来限制匹配:
Vim具有特殊的正则表达式原子,可在特定的行、列等位置进行匹配;您可以使用它们(可能还要加上范围),以限制匹配:
:5,12s/\(\%5l\|\%12l\)foo/bar/g
请参见:help /\%l
你可以在第五行进行替换,然后在第12行以最小的努力重复它:
:5s/foo/bar
:12&
正如Ingo所指出的那样,:&
会忽略你的标记。由于您正在使用/g
,因此正确的命令应该是:&&
:
就像Ingo指出的那样,:&
会忽略你的标志。因为你使用了/g
,所以正确的命令应该是:&&
:
:5s/foo/bar/g
:12&&
请参见:help :&
及其相关命令。
:&
利用起来。如果有标志 (s/../../g
),就必须使用 :&&
,不过... - Ingo Karkat\(\%5l\|\%12l\)
比:&
更晦涩难懂。 - doubleDown:&
当然有文档记录,但在普通的Medium文章或YouTube视频中很少提到,遗憾的是,除非被迫,vimmers很少会超越这些内容。它甚至在Vim自己的介绍材料中都没有提到。从这个意义上说,:&
绝对值得被称为“晦涩”。 - undefined:&
标记为晦涩。这在一定程度上是基于个人经验,但是语法的简洁性,以及该功能仅由一个字符提供,从客观上来看,这并不适合被列为“晦涩”列表中的内容。正如@doubleDown在他的评论中温和但坚定地指出的那样。我认为英戈在这件事上显然是错的。我不会对Medium的帖子抱有任何期望,更不用说任何视频了!当代科技博客中没有什么值得一提的质量。我回想起更久远的时光。我看着世界中的智慧渐渐流失。 - undefined:5,12s/foo/bar/gc
n
5 或 6 次比将 \(\%5l\|\%12l\)
添加到替换语句中更费力吗? - Dean: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
的行中用eno
替换one
:
并且您希望在出现enil
而不是line
的行中用eno
替换one
:
:g/enil/s/one/eno/
ed
这个文本编辑器,他有类似于vi和vim的命令。它很可能比vi和vim更早出现。ed file <<EndCommands
5
s/foo/bar/g
7
s/foo/bar/g
wq
EndCommands
:s
前面,但仍然存在 :s
命令的重复(而 romainl 的解决方案避免了这种情况)。 - Ingo Karkatsed
... - Ingo Karkat