Po wygenerowaniu pliku znaczników za pomocą exuberant-ctags
mogę przejść z wywołania funkcji do jego deklaracji, <C-]>
co jest dość wygodne.
Moje pytanie brzmi: jak to zrobić w inny sposób? Kiedy kursor znajduje się na definicji funkcji, jak mogę przejść do linii, w których funkcja jest wywoływana?
Kiedy patrzę na plik wygenerowany przez ctags, widzę tylko informacje związane z lokalizacją definicji, a nie wywołań, czy to oznacza, że nie mogę tego zrobić, że Vim jest sprytnym obejściem lub że muszę coś użyć inaczej niż exuberant-ctags
?
Odpowiedzi:
Nie można przejść do wywołań funkcji za pomocą
ctags
. W przypadku C / C ++ i Java istniejecscope
i ładnie integruje się z Vimem (patrz:help cscope
). W przypadku innych języków może być możliwe znalezienie narzędzia, które generuje / eksportujecscope
bazy danych kompatybilne (hscope
dla Haskell orazstarscope
dla Ruby, Go i JavaScript). Można również skorzystaćcscope
z GNU światowych baz danych, wskazująccscopeprg
nagtags-cscope
.Na marginesie: jeśli nie zniechęca Cię czasem zagadkowe użycie języka Engrish ;;) prawdopodobnie prawdopodobnie zamiast tego używasz uniwersalnych tagów
exuberant-ctags
. Ten ostatni nie był aktualizowany od lat. Ten pierwszy jest aktywnie utrzymywanym widelcem.źródło
cscope
sam obsługuje C / C ++, Lex i Yacc. Wsparcie dla Java jest marginalnie przydatne. Możesz uzyskać wsparcie dla (starego stylu) PHP i JavaScript z GNUglobal
, za pomocągtags-cscope
narzędzia. I, jak powiedziałem powyżej, istnieją inne indeksatory, które mogą eksportowaćcscope
bazy danych kompatybilne.Nie możesz tego zrobić z ctags.
Wypróbuj ostrzejszą alternatywę, taką jak cscope (która ma nawet własną sekcję pomocy :)
:help cscope
lub globalną .źródło
cscope
sam nie obsługuje ani PHP, ani JavaScript. Możesz jednak indeksować pliki PHP i JavaScript za pomocą GNUglobal
, a następnie uruchomić,gtags-cscope
aby użyćgtags
pliku wynikowego zcscope
.cscope
„s źródeł zamiast spekulować na podstawie szybkich eksperymentów.cscope
ma raczej zrelaksowany parser C. To wszystko, co ma i wszystko, co robi. Dzięki temu parserowi „obsługuje” wiele języków, dla odpowiednich wartości „wsparcia”. Konstrukty są rozpoznawane, dopóki wyglądają mniej więcej tak, jak C. Dlatego klasy Fi Java i nowsze konstrukcje PHP nie są rozpoznawane. Porównaj fi z gwiezdnym lunetą , który faktycznie pozwala dodawać nowe języki.Możesz użyć polecenia grep Vima, aby przeszukać wszystkie pliki w swoim projekcie:
Umieśćmy to w kluczu:
Uważam, że to jedno kluczowe wyszukiwanie w całym projekcie jest bezcenne, gdy badam dużą, nieznaną bazę kodów.
\<
i\>
są sekwencjami regularnymi, które wskazują początek i koniec słowa, więc nie otrzymasz częściowych dopasowań. (-w
Opcja grep może być innym sposobem na osiągnięcie tego.)Jest to jednak wyszukiwanie nieinteligentne , więc może dawać wyniki fałszywie dodatnie, jeśli to samo słowo pojawia się w niepowiązanych kontekstach.
Prawdę mówiąc, zamiast tego używam własnej zmodyfikowanej wersji wtyczki grep.vim . Jest to nieco łatwiejsze w użyciu:
src/ lib/
zamiast.
) i zapamiętuje zmiany.\b
należy go używać zamiast\<
i\>
.Konfiguruję go i wykluczam niektóre standardowe pliki takie jak ten .
Aby uzyskać szybki dostęp, tworzę dwa skróty klawiszowe . F3pozwala mi edytować wiersz poleceń, F4używa wcześniej skonfigurowanego wiersza poleceń bez dodatkowych naciśnięć klawiszy. Mechanizm jest dość brzydki i przydałby się porządek, ale dobrze mi służył.
źródło