Вы можете установить метки в начале и конце вашего блока, используя m
(например, ma
, mb
), а затем ссылаться на них в диапазоне команды ex как :'a,'b
.
Как и bignose сказал , вы можете использовать визуальный блок для создания неявной области для команды, которую можно передать команде ex с помощью :'<,'>
Вы также можете использовать регулярные выражения для разделения блока (например, для всех строк между start
и end
используйте :/start/,/end/
Например, чтобы сделать замену в диапазоне строк:
:'<,'>s/foo/bar/g
:'a,'bs/baz/quux/g
:/harpo/,/chico/s/zeppo/groucho/g
Запоминается последний визуально выбранный диапазон, поэтому его можно использовать повторно, не выбирая повторно.
Подробнее о диапазонах см. :help range
Вы можете дополнительно ограничить себя в пределах диапазона, используя g//
. Например, если вы хотите заменить foo на bar только в строках, содержащих baz в выбранном диапазоне:
:'<,'>g/baz/s/foo/bar/g
Когда вы определяете новую команду ex, вы можете передать диапазон, заданный для ex-команды, используя <line1>,<line2>
. См. :help user-commands
для получения дополнительной информации об определении бывших команд.
Внутри функции vimscript вы можете получить доступ к неявно переданному диапазону, используя a:firstline
и a:lastline
. Вы можете определить свой текущий номер белья, используя line('.')
, и определить, находитесь ли вы внутри блока, используя обычную логическую логику (a:firstline <= line('.') && line('.') <= a:lastline
). См. :help functions
, чтобы узнать больше о функциях vimscript.
Другой подход заключается в использовании внутренних i
и одиночных a
селекторов vim. Например, чтобы удалить всю строку в двойных кавычках, используйте da"
в обычном режиме. Чтобы оставить цитаты, используйте di"
. Подробнее см. :help object-select
.