Это прекрасно:
fun! Foo()
'<,'>s/foo/bar/ge
endfun
Вы можете получить E20: Mark not set
, если визуальный выбор еще не установлен.Для определения меток '<,'>
визуальный режим должен быть уже оставлен ;но это также достигается командой :
, которая используется для вызова функции, поэтому это не должно быть проблемой (за исключением особых случаев, таких как :help :map-<expr>
).Если вы устанавливаете визуальный отбор только внутри функции, вам нужно ее оставить.Вместо
:normal! Vjj
добавьте <Esc>
для выхода из визуального режима (и установите метки):
:execute normal! "Vjj\<Esc>"
Обратите внимание, что жесткое кодирование выделения часто является плохим стилем;Вы обычно хотите, чтобы отображение работало либо с выделением, либо с [count]
строками, либо с текущей строкой / целым буфером.Для этого рекомендуется определить функцию с атрибутом range
;подробности см. :help function-range-example
.