Я хотел бы создать макрос, чтобы, если я выберу фрагмент текста (с помощью клавиатуры или мыши) и вызвал этот макрос, он добавил [b]
и [/b]
вокруг текста (например). Я знаком с записью макросов с использованием q
и запуском их с @
, но я не мог понять, как связать макрос с текущим визуальным выделением.
2 ответа
Макросы ничем не отличаются от того, что вы вводите для достижения своей цели. При работе с визуальным выделением вы обычно используете движения, такие как `<
`>
чтобы перейти в начало и конец выделения и вставить теги с i
и a
; gv
позволяет вам повторно выбрать предыдущий выбор.
Для вашего конкретного примера, возможно, стоит заглянуть в surround.vim - Плагин удаления / изменения / добавления скобок / цитат / XML-тегов ; может быть, он уже делает то, что вы хотите.
Другим вариантом является плагин Ultisnips . У него есть специальный механизм "визуального заполнителя".
Фрагменты могут содержать специальный заполнитель с именем $ {VISUAL}. Переменная $ {VISUAL} раскрывается текстом, выбранным непосредственно перед развертыванием фрагмента.
Таким образом, вы можете определить фрагмент, который окружает визуальный выбор, с помощью определенного тега:
snippet b "surrond with [b] tag"
[b]${1:${VISUAL}}[/b]
endsnippet
или вы можете сделать общий фрагмент, который окружает визуальный выбор любым тегом:
snippet tag "surround with a tag"
[${1}]${2:${VISUAL}}[/$1]
endsnippet
или вы можете сходить с ума и использовать возможности Python-интерполяции, чтобы выполнить любую предварительную обработку, которую вы хотите, с визуально выбранным текстом внутри фрагмента.