2012-08-08 12 views
24

:%s/one/two/ zastąpi pierwsze wystąpienie z two. Czy zamiast tego istnieje prosty sposób zastąpienia wystąpienia last?Zamień ostatnie wystąpienie w linii

nie mogę zakładać, że to obok linii end-of-i nic wyjątkowy wokół ostatniego wystąpienia do 'grab' w użyciu, podobny do tego:.

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

Odpowiedz

34

Najprostszym sposobem byłoby pozwolić dowolny tekst w przedniej części meczu i określić dopasowaną regionu korzystając \zs:

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

Uwielbiam prostotę tego rozwiązania. Uderzyłem się w głowę, próbując użyć negatywnego przeczucia w vim przez ostatnie dwie godziny, ale ta zadziałała od razu! dzięki!! – flangofas

11

Ponieważ * jest chciwy , to powinno działać:

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

ładne i zadbane :) – Amir

+1

Czasami chciwość może być wykorzystana. –

3

Jeśli chcesz zamienić słowo w jednym wierszu, można też powiedzieć:

$?one<CR>cetwo<ESC> 

Który pójdzie do końca linii ($) i znaleźć w tył słowo one (?one<CR>). Następnie zmieni się zmienić (c) wszystko aż do koniec (e) słowa z ciągiem two. Oczywiście można zmieniać e z E, f, F i tak dalej. Możesz nawet powiedzieć c17l, aby zmienić następne 17 znaków.

Powiązane problemy