2013-05-19 27 views
5

Zakładając Mam strukturę katalogów kod w następujący sposób:Jak mogę uruchomić ctags w dużej bazie kodu?

/top 
    /second 
     /core 
      a.pl 
      b.pl 
      c.pl 
     /common 
      d.pl 
      e.pl 
     /util 
      f.pl 
      g.pl 
      h.pl  

Gdzie należy uruchomić ctags tak, że mogę skoczyć do definicji funkcji poprzez vi?

Na przykład miałem:

/dir 
    /perl 
     a.pl 

i biegnę w dir komendę ctags -R perl ale w a.pl nie mogłem skoczyć do definicji funkcji, które istniały w tym samym pliku.
Jeśli zrobiłem ctags -R .wewnątrz katalogu perl to działało.

Więc nie mogę zrozumieć wzorca. Czy powinienem uruchomić ctags w core, common,util? Co się stanie, jeśli moja baza kodów będzie ogromna? Czy naprawdę powinienem uruchomić go w każdym katalogu?

+0

Które kody są wyświetlane? Jeśli używasz Exuberant Ctags, mają [FAQ o tym właśnie temacie] (http://ctags.sourceforge.net/faq.html#15). – msw

+0

Ponieważ używasz ctags w Vimie, polecam nie radzić sobie z ctagami ręcznie, ale spróbuj użyć wtyczki Indexer (http://goo.gl/lNrB5), która bezboleśnie generuje tagi dla całego projektu (ów) i utrzymuje tagi w górę do -data. Możesz również sprawdzić moją odpowiedź na to pytanie http://goo.gl/dMavX, aby uzyskać więcej szczegółów. –

+0

@msw: Nie wiem. Te zainstalowane w cygwin. Jak to sprawdzić? – Cratylus

Odpowiedz

4

Zwykle używa się tylko jednego pliku tags znajdującego się w katalogu głównym projektu.

Na przykład, aby oznaczyć cały kod źródłowy Vima, znajdujący się w ~/src/vim-7.3, należy przejść do tego katalogu i wygenerować tam plik znaczników.

To wszystko.

Możesz zrobić to samo z wnętrza Vima, oczywiście. Uruchom Vima, a następnie wpisz:

:cd ~/src/vim-7.3 
:!ctags -R 

Sprawdź, czy masz prawidłowe ustawienie 'tags'. Domyślna wartość to ./tags,tags, co oznacza, że ​​Vim będzie szukał pliku tags w bieżącym katalogu.

Należy przeczytać w całości :h 'tags'. Możesz polecić Vimowi, aby szukał plików tags głęboko w drzewie katalogów, podając wzory zawierające symbole wieloznaczne.

Jeszcze jedno: dla tego podejścia do pracy, aktualny katalog roboczy Vima musi pozostać w katalogu głównym przez cały czas. Jeśli masz jakąś opcję, taką jak 'autochdir', ustaw lub samodzielnie przełączaj katalogi, to oczywiście nie można znaleźć tags.

+0

Po wpisaniu znaczników ': h 'otrzymuję:' E433: Brak pliku znaczników E149: Niestety, brak pomocy dla' znaczników ' Naciśnij klawisz ENTER lub wpisz polecenie, aby kontynuować ' – Cratylus

+0

@Catatylus To brzmi jak masz poważny problem z plikami runtime. Czy ': help' w ogóle działa? – glts

+0

Jeśli napiszę ': help', otrzymam:' E433: Brak pliku znaczników E149: Niestety, nie ma pomocy dla help.txt Naciśnij klawisz ENTER lub wpisz polecenie, aby kontynuować ' – Cratylus

6

Twój plik tags powinien zostać wygenerowany w pierwszym wspólnym przodku Twojego kodu (w twoim przypadku będzie to second) z $ ctags -R ..

Sugeruję dodać tę linię do ~/.vimrc w celu Vim zawsze znaleźć plik tags, bez względu na to, gdzie jesteś w swoim projekcie i bez względu na to, co „bieżący katalog” to:

set tags=./tags;/,tags;/ 

Działa to tak, jak w odpowiedzi @ glts z ciekawym akcentem: ze względu na część ;/, Vim przegląda i podnosi do / dla pliku tags. Zakładając, że edytujesz g.pl, Vim poprawnie użyje twojego pliku tags znajdującego się pod numerem second.

:h tags 
:h ctags 
+0

Miło zgadnąć z ', /' ale nie działa tak w Vim. Niestety, nie ma żadnego spaceru po drzewie katalogów. I rzeczywiście możesz użyć 'ctags -R' do oznaczania' ctags -R .'! – glts

+0

To '; /' not',/'('/'nie jest wymagane, ale bardziej wyraźne, więc trzymam go tutaj) i tak to działa w ten sposób. Zobacz ': h file-searching', w szczególności część" wyszukiwania w górę ". – romainl

+0

Och, tak, stoję poprawiony. Schludny. – glts