Ось як я це зробив би. Додайте це до свого.vimrc
vnoremap if [[O][
Пояснення: vnoremap означає зіставити ліву частину ifв праву частину, [[mO][поки ви перебуваєте у візуальному режимі. ifозначає у функції , хоча ви можете перейменувати це, якщо хочете. [[переходить до початку функції. Oпереміщується до іншого кінця вашого візуально вибраного тексту, а потім ][переміщується до кінця функції.
Отже, якщо ви хочете здійснити пошук у функції, тепер vперейдіть у візуальний режим за допомогою та виберіть всю функцію за допомогою if. Тепер вийдіть із візуального режиму за допомогою <esc>та виконайте пошук за допомогою /\%V. \%Vобмежує ваш пошук раніше вибраним текстом. Якщо ви не хочете вдарити <esc>/\%V, можете також додати це до свого .vimrc:
vnoremap / <esc>/\%V
Тоді ваша послідовність натискань клавіш виглядатиме так:
vif/foo<enter>
і це знайде всі виникнення foo в поточній функції.
Єдиним недоліком цього методу є те, що він очікує, що брекети відкривання та закриття мають обидва відступи. Якщо ви регулярно працюєте з кодом, у якого цього немає, наприклад
int foo() {
bar()
}
тоді ця трохи складніша версія буде працювати:
vnoremap if ][ma%O'a
Це очікує, що на фіксації дужки буде 0 відступів. Якщо на вступній дузі є відступи, вона все ще спрацьовує, хоча і не має позначки. Якщо ви регулярно використовуєте позначку "a", ви можете перемістити це, наприклад
vnoremap if ][mb%O'b
vnoremap if ][mc%O'c
...
lh#dev#find_function_boundariesвід lh-dev