Poruszanie się po projektach kodu bez użycia zewnętrznych poleceń

9

Próbuję zebrać zestaw narzędzi poleceń / zapytań Vima, w trybie poleceń lub wyszukiwania, do nawigacji w bazie kodu bez użycia tagów Ctag lub innych narzędzi zewnętrznych. Tagi są świetne, ale wsparcie może się różnić w zależności od środowiska programistycznego, w którym utknąłeś. Chciałbym polegać tylko na wiedzy Vima.

użytkownik1332148
źródło
4
Może powinieneś powiedzieć „narzędzia zewnętrzne” zamiast „ctags”, ponieważ moją pierwszą sugestią byłoby cscope.
muru
1
Jedną z rzeczy, których używam, jest polecenie gd. Spowoduje to przeniesienie kursora do lokalnej deklaracji zmiennej pod kursorem.
nitishch
@muru Nie chcę używać żadnych zewnętrznych narzędzi. To, czego próbuję się nauczyć, to techniki efektywnego poruszania się po bazie kodu za pomocą poleceń Vima. Wiem, że da się to zrobić, ale oczywiście wymaga głębszej wiedzy Vima niż ja. Być może nie jest to dobre pytanie SE, ponieważ jest tak otwarte, ale nie wiem, gdzie jeszcze szukać.
użytkownik1332148,

Odpowiedzi:

11

„Dołącz wyszukiwanie” to jedno z takich narzędzi:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

Powiązane z „włącz wyszukiwanie”, „wyszukiwanie definicji” jest również interesujące:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

Oba narzędzia zależą od szeregu opcji, które mogą lub nie mogą być ustawione przez wtyczki typu pliku.

Zobaczyć :help include-search.


Możesz również używać gdi gDjako lekkie wersje [Di ]D.

Zobaczyć :help gd.


W bieżącym buforze poniższe polecenie wyświetli każdą definicję funkcji i jej numer wiersza:

:g/func/#

Zobaczyć :help :g.


:grepi :vimgrepsą również przydatne, jeśli tylko dlatego, że ich wynik jest podawany do listy quickfix, które mogą być zmieniane przy użyciu :cn, :cp... i wyświetlone w oknie bardzo poręcznym quickfix.

Zobacz :help :grep, :help :vimgrepa :help quickfix.


Mówiąc o / okna listy quickfix pisałem tę funkcję (na podstawie prac innych), aby wyświetlić wyniki [I, ]I, :ilist, [D, ]Di :dlistna liście quickfix / okna. Oczywiście YMMV.


Choć nie jest to wyłącznie narzędzie nawigacyjne, okno podglądu jest bardzo przydatne do spojrzenia na podpis funkcji, z którą pracuję.

Zobaczyć :help preview-window.


To mówi…

Vim nie wie nic o twoim kodzie poza kilkoma wzorcami wyrażeń regularnych, które mogą, ale nie muszą pasować do twojego stylu kodowania lub cokolwiek innego. Oznacza to, że nawigacja kodu jest lepsza przy pomocy zewnętrznych narzędzi, takich jak ctags, cscope lub GNU GLOBAL.

romainl
źródło
5

Istnieje wiele sposobów poruszania się po kodzie (zawartych w Vimie i zewnętrznych), wciąż je odkrywam. W codziennej pracy używam:

  • Greping tekstu w plikach projektu i nawigacja przez okno szybkiej poprawki (używam srebrnego wyszukiwarki do grepinga).
  • Korzystając z wtyczek związanych z językiem, wiem, że istnieją takie dla javascript, ruby, go, które pozwalają na przeskakiwanie między modułami programu (we wtyczce javascript jest gf-command
  • Ctrl+O, Ctrl+I- przeskocz do tyłu lub do przodu w „historii” nawigacji
  • g; - przeskocz na ostatnio edytowane miejsce w pliku
  • Używanie znaków do umieszczania „zakładek” w określonych miejscach. Możesz umieścić znak za pomocą '[some_letter]polecenia, jeśli litera jest duża, otrzymasz znak, który będzie dostępny z dowolnego pliku (bufora).
Aleksander Myszow
źródło