Oto jak bym to zrobił. Dodaj to do swojego.vimrc
vnoremap if [[O][
Objaśnienie: vnoremap oznacza odwzorowanie lewej strony if
na prawą, [[mO][
gdy jesteś w trybie wizualnym. if
oznacza W funkcji , chociaż możesz zmienić nazwę, jeśli chcesz. [[
przeskakuje na początek funkcji. O
przesuwa 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ą v
i wybierz całą funkcję za pomocą if
. Teraz wyjdź z trybu wizualnego za pomocą <esc>
i wyszukaj za pomocą /\%V
. \%V
ogranicza wyszukiwanie do wcześniej zaznaczonego tekstu. Jeśli nie chcesz uderzać, <esc>/\%V
moż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_boundaries
od lh-dev