2012-08-08 52 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個字符。

相關問題