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

Ограничение области поиска для кода в Vim

Как ограничить область поиска в Vim блоком функций/классов/кодов, в котором находится текущий курсор, без необходимости выяснять, что такое номера строк? Также можно было бы выполнять поиск в визуальном выборе, так как существуют методы для выбора текущего блока кода.

(Подобно этому вопросу, но более общий)

4b9b3361

Ответ 1

Я собираюсь просто скопировать и вставить весь контент "Поиск с помощью/и?" (в пределах визуального выбора) из Vim Tips Wiki.

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

Для фактического поиска в пределах визуальный выбор, вам нужно будет использовать атома \%V или использовать маркеры определяемый визуальным выбором с помощью атомы \%>'< и \%<'>. Это лучше всего сделать, оставив визуальный выбор с Esc перед входом Результат поиска. Вы можете рассмотреть отображение для автоматического выхода визуальный выбор и введите соответствующих атомов. Например:

:vnoremap <M-/> <Esc>/\%V

Используя это сопоставление, вы можете нажать Alt - /, чтобы автоматически заполнить в "диапазоне" для вашего поиска так же, как используя команду Ex с :. Использовать это, перейдите к первой строке интереса и нажмите V, чтобы начать визуальный выбор по линии. Переместить вниз (нажмите j для строки или } для пункт и т.д.). Когда у тебя есть выбрал область, которую вы хотите найти, нажмите Alt - /. Визуальный выбор удаляться, и команда поиска будет Начало. Вы увидите:

/\%V

Добавьте то, что вы хотите найти, затем нажмите Enter. Например, вы можете ввести зеленый и см.:

/\%Vgreen

Когда вы нажимаете Enter, каждое вхождение "зеленый" будет выделен, но только в том районе, в котором вы ранее выбранный.

Вот еще два примера, которые делают не используйте визуальный выбор. Первый команда выполняет поиск только в строках 10 до 20 включительно. Второй поисковый запрос между отметками a и b.

/\%>9l\%<21lgreen
/\%>'a\%<'bgreen

Ответ 2

Для краткости:

" tldr;
v i { <ESC> /\%Vsearch-term

" Search for search-term within the current code block (defined by curly braces {}).
" Begin in normal mode, then enter the following:

" enter visual mode
v

" look for stuff in-between the current...
i

" curly braces enclosure
{

" (now the enclosure should be highlighted)

" exit visual mode
<ESC>

" search the last visual mode selection for search-term
/\%Vsearch-term

" note: to search within other enclosures, you can substitute curly braces for: 
" - parenthesis, 
" - square brackets, 
" - or other enclosure pair characters