2012-08-08 55 views
24

:%s/one/two/two取代one第一发生。有没有一种简单的方法来代替最后发生呢?替换最后一次出现在一行

我不能假设它的旁边结束行,并没有什么围绕最后出现的独特的“抢”来使用,与此类似:

one two three one two three one two one two one two ... 

回答

34

最简单的方法是,允许在比赛的前任意文本,并指定使用\zs匹配的区域:

:%s/.*\zsone/two/ 
+1

我喜欢这个解决方案的简单性。我一直在敲打我的脑袋试图使用负前瞻在vim最后两个小时,但这个工作马上!谢谢!! – flangofas 2014-07-30 13:07:29

11

因为*是贪婪,这应该工作:

:%s/\(.*\)one/\1two/ 
+0

漂亮整洁:) – Amir 2017-03-15 19:46:01

+1

有时贪婪可以被利用。 – 2018-02-17 00:25:25

3

如果你想在一行替换词,你还可以说:

$?one<CR>cetwo<ESC> 

哪会去行($)的结束和找到向后字one?one<CR>)。然后,它会变化c)一切都交给这个词的年底e)以字符串two。当然你也可以用EfF等变化e。你甚至可以说c17l改变接下来的17个字符。

相关问题