Oto jak bym to zrobił. Dodaj to do swojego.vimrc
vnoremap if [[O][
Objaśnienie: vnoremap oznacza odwzorowanie lewej strony ifna prawą, [[mO][gdy jesteś w trybie wizualnym. ifoznacza W funkcji , chociaż możesz zmienić nazwę, jeśli chcesz. [[przeskakuje na początek funkcji. Oprzesuwa się na drugi koniec wizualnie zaznaczonego tekstu, a następnie ][przechodzi na koniec funkcji.
Tak więc, jeśli chcesz wyszukać w funkcji, teraz wejdź w tryb wizualny za pomocą vi wybierz całą funkcję za pomocą if. Teraz wyjdź z trybu wizualnego za pomocą <esc>i wyszukaj za pomocą /\%V. \%Vogranicza wyszukiwanie do wcześniej zaznaczonego tekstu. Jeśli nie chcesz uderzać, <esc>/\%Vmożesz również dodać to do .vimrc:
vnoremap / <esc>/\%V
Następnie sekwencja naciśnięć klawiszy wyglądałaby następująco:
vif/foo<enter>
i to znajdzie wszystkie wystąpienia foo w bieżącej funkcji.
Jedynym minusem tej metody jest to, że oczekuje, że otwierające i zamykające nawiasy klamrowe będą miały 0 wcięć. Jeśli regularnie pracujesz z kodem, który go nie ma, np
int foo() {
bar()
}
wtedy ta nieco bardziej skomplikowana wersja będzie działać:
vnoremap if ][ma%O'a
To tylko oczekuje, że nawias zamykający będzie miał 0 wcięć. Jeśli nawias otwierający ma wcięcia, nadal działa, chociaż zajmuje znak. Jeśli regularnie używasz znaku „a”, możesz go przenieść np
vnoremap if ][mb%O'b
vnoremap if ][mc%O'c
...
lh#dev#find_function_boundariesod lh-dev