Ограничение области поиска для кода в Vim - PullRequest
11 голосов
/ 27 мая 2010

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

(похоже на этот вопрос, но более общий)

Ответы [ 2 ]

13 голосов
/ 27 мая 2010

Я собираюсь просто скопировать и вставить весь контент "Поиск с / и?" (в визуальной подборке) из Вики Советов Vim .

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

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

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

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

/\%V

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

/\%Vgreen

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

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

/\%>9l\%<21lgreen
/\%>'a\%<'bgreen
1 голос
/ 29 июня 2016

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

" 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
...