vimscript: как подставить в текущий выбор? - PullRequest
0 голосов
/ 06 февраля 2019

Внутри функции я могу использовать:

s/foo/bar/ge

, но она заменяет только текущую строку.Я хотел бы заменить в текущем выборе.Я пытался

'<,'>s/foo/bar/ge

безуспешно.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 06 февраля 2019

Это прекрасно:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...