Общее решение
Я бы использовал :help function-search-undo
и извлекал бы команды в :function
. Это не сожжет текущий шаблон поиска и, следовательно, не повлияет на подсветку поиска. Чтобы быть полностью нейтральным, вам просто нужно удалить использованный шаблон замещения из истории поиска (через histdel()
):
function! MakeHeading()
normal! Vyp
s/./=/g
call histdel('search', -1)
endfunction
nnoremap <leader>= :call MakeHeading()<CR>
Обратите внимание, что я также упростил обработку визуального выделения: поскольку V
всегда выделяет всю строку, вам не нужно переходить к первому столбцу (^
), также не требуется повторный выбор; мы можем просто позволить :substitute
работать с текущей (вставленной) строкой.
Альтернативная реализация
Это напоминает мне, что каноническая реализация этой функции использует команду :help v_r
, и это действительно требует повторного выбора:
nnoremap <leader>= Vyp0v$r=
Поскольку здесь нет паттерна, подсветка поиска не зависит от него: -)