Подтвердить что ты не робот

Заменить последнее вхождение в строку

:%s/one/two/ заменит первое вхождение one на two. Есть ли простой способ заменить последнее вхождение?

Я не могу предположить это рядом с концом строки, и нет ничего уникального в последнем случае, чтобы "захватить" для использования, аналогично этому:

one two three one two three one two one two one two ...
4b9b3361

Ответ 1

Самый простой способ - разрешить произвольный текст перед совпадением и указать согласованную область с помощью \zs:

:%s/.*\zsone/two/

Ответ 2

Потому что. * жадный, это должно работать:

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

Ответ 3

Если вы хотите заменить слово в одной строке, вы также можете сказать:

$?one<CR>cetwo<ESC>

Которое будет идти до конца строки ($) и найти назад слово one (?one<CR>). Затем он изменит (c) все до конца (e) слова со строкой two. Конечно, вы можете изменить e на e, f, f и так далее. Вы могли бы даже сказать c17l изменить следующие 17 символов.