VIM: Искать только между конкретными номерами строк? - PullRequest
36 голосов
/ 16 июля 2010

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

:12,24s/search/replace

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

:12,24/search

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

Спасибо.

Ответы [ 6 ]

36 голосов
/ 16 июля 2010

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

 :12,24g/search/

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

30 голосов
/ 16 июля 2010
:help search-range

, а затем

:help /\%>l

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

/\%>12l\%<24lsearch
20 голосов
/ 16 июля 2010

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

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

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

См .: help% V

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

16 голосов
/ 16 июля 2010

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

:12,24s/search//gc

С :help search-range

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

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

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

4 голосов
/ 03 сентября 2016

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

/\%>'a\%<'bSearchText

Это можно упростить с помощью карты

cmap vmsab /\%>'a\%<'b
cmap vmscd /\%>'c\%<'d
0 голосов
/ 17 февраля 2018

Используя Плагин Narrow Region , мы можем открыть временный буфер с диапазоном, который нам нужно найти или изменить

:900,1000NarrowRegion

Затем мы можем выполнить поиск

/thing

Или поменяй и запиши обратно буфер

:%s/this/that/g
:wq
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...