Ответ 1
Самый простой способ - разрешить произвольный текст перед совпадением и указать согласованную область с помощью \zs
:
:%s/.*\zsone/two/
:%s/one/two/
заменит первое вхождение one
на two
. Есть ли простой способ заменить последнее вхождение?
Я не могу предположить это рядом с концом строки, и нет ничего уникального в последнем случае, чтобы "захватить" для использования, аналогично этому:
one two three one two three one two one two one two ...
Самый простой способ - разрешить произвольный текст перед совпадением и указать согласованную область с помощью \zs
:
:%s/.*\zsone/two/
Потому что. * жадный, это должно работать:
:%s/\(.*\)one/\1two/
Если вы хотите заменить слово в одной строке, вы также можете сказать:
$?one<CR>cetwo<ESC>
Которое будет идти до конца строки ($
) и найти назад слово one
(?one<CR>
). Затем он изменит (c
) все до конца (e
) слова со строкой two
. Конечно, вы можете изменить e
на e
, f
, f
и так далее. Вы могли бы даже сказать c17l
изменить следующие 17 символов.