Подтвердить что ты не робот

VIM: поиск только между определенными номерами строк?

Я знаю, что с помощью команды подстановки Vim можно задать диапазон строк:

:12,24s/search/replace

Я хочу также указать диапазон с обычным поиском. Что-то вроде

:12,24/search

Так как это не работает (по крайней мере, на моей конфигурации Vim), кто-нибудь знает, как это сделать?

Спасибо.

4b9b3361

Ответ 1

:help search-range

а затем

:help /\%>l

так существенно:

/\%>12l\%<24lsearch

Ответ 2

Отличный ответ от акиры. Но после некоторого рытья я нашел альтернативу. Это не так элегантно, но легче набирать:

 :12,24g/search/

Это даст вам одно раздражающее приглашение, но оно окажется в первой строке диапазона, содержащей искомую строку.

Ответ 3

Вам действительно нужны номера строк? Другой способ может заключаться в визуальном выборе диапазона.

  • выберите диапазон с помощью v, V или любого другого
  • нажмите ESC, чтобы отменить выбор диапазона
  • поиск с помощью /\%Vwhat_to_search для поиска 'what_to_search' в ранее выбранном диапазоне.

Это меньше, чем печатать, но не напрямую, что вы просили; -)

Смотрите: help% V

[EDIT] Отлично, я только что узнал, что диапазон поиска можно изменить после выполнения поиска, выбрав другой диапазон, отменив выбор этого диапазона, нажав ESC и нажав n, чтобы повторить поиск. Вим действительно всегда хорош для приятных сюрпризов.

Ответ 4

Продолжайте использовать команду подстановки, но добавьте флаги gc в исходный пример.

:12,24s/search//gc

От :help search-range

[Для поиска в пределах диапазона] используйте ": заменить" командой "c" флаг.

Пример: :.,300s/Pattern//gc

Эта команда будет выполнять поиск из позиции курсора до строки 300 для "Шаблон". В матче вы можете ввести 'q', чтобы остановить, или 'n', чтобы найти следующий матч.

Ответ 5

Если метки обозначают a и b, поиск может быть ограничен областью между a и b, используя

/\%>'a\%<'bSearchText

Это можно упростить с помощью cmap

cmap vmsab /\%>'a\%<'b
cmap vmscd /\%>'c\%<'d