Я опоздал на вечеринку, но слишком часто полагался на такие поздние ответчики stackoverflow, чтобы не делать этого. Я собрал подсказки по reddit и stackoverflow, и лучший вариант - использовать шаблон \%>...c
в поиске, который соответствует только после вашего курсора.
Тем не менее, он также испортил шаблон для следующего шага замены, и его трудно напечатать. Чтобы противостоять этим эффектам, пользовательская функция должна затем фильтровать шаблон поиска, сбрасывая его. Увидеть ниже.
Я ограничил себя картированием, которое заменяет следующий случай и переходит к следующему после, а не больше (в любом случае, это была моя цель). Я уверен, что, опираясь на это, можно выработать глобальную замену. При работе с решением, нацеленным на что-то вроде :%s/.../.../g
, имейте в виду, что приведенный ниже шаблон отфильтровывает совпадения в всех строках, оставленных до позиции курсора, но очищается после завершения одиночной замены, поэтому сразу теряет этот эффект, переходит к следующему матчу и, таким образом, может проходить все матчи один за другим.
fun! g:CleanColFromPattern(prevPattern)
return substitute(a:prevPattern, '\V\^\\%>\[0-9]\+c', '', '')
endf
nmap <F3>n m`:s/\%><C-r>=col(".")-1<CR>c<C-.r>=g:CleanColFromPattern(getreg("/"))<CR>/~/&<CR>:call setreg("/", g:CleanColFromPattern(getreg("/")))<CR>``n