2010-06-03 9 views
16

Czy są jakieś alternatywy dla ctags i cscope z obsługą Objective-c. Dotyczy to rozwoju kakao, więc nieuchronnie wydaje mi się, że będę używać Xcode (i prawdopodobnie powinienem). Zastanawiam się, jakie są moje opcje Vima.Alternatywy dla Ctags/Cscope z Objective-c?

Może jest jakiś system wtyczek, taki jak eclim, ale dla Xcode?

EDIT

Wygląda więc na to, że inne niż aktualizowanie ctags wspierać objective-c, jestem pecha. Czy ktoś wie, czy cscope jest taki sam?

+0

Może trochę późno, by odpowiedzieć, ale kilka plastrów, które zostały zaproponowane, aby dodać konkretna pomoc C dla ctags, więc powinien być dla następnej wersji. Co do czasu, kiedy zostanie wydany, jest to naprawdę inny problem ... –

+1

Istnieje teraz działający parser Objective C w trunk ... zobacz moją odpowiedź –

Odpowiedz

27

długo po tym pytaniu, "grając" z vimem, chciałem obsługiwać ObjC, szczególnie z wtyczką taglisty. Znalazłem to pytanie, a następnie wykopał trochę, a tutaj jest nie tak brudne rozwiązanie:

  1. ObjectiveC parser has been added to Exuberant CTags trunk, to nie jest zwolniony (jeszcze?)
  2. można łatwo zainstalować na homebrew OS X poprzez:

    $ brew install ctags --HEAD

  3. Należy zauważyć, że przy stosowaniu ctags, .m jest traktowany jako Matlab i .h traktuje jak C++. Aby zastąpić, użyj:

    $ ctags --langmap=ObjectiveC:.m.h

  4. Potem dodał coś podobnego do mojego .vimrc wsparcia taglist:

    let tlist_objc_settings = 'ObjectiveC;P:protocols;i:interfaces;types(...)'

    dodać żadnych zainteresowań Wpisujesz z tej listy:

    ctags --list-kinds=all 
    ObjectiveC 
        i class interface 
        I class implementation 
        p Protocol 
        m Object's method 
        c Class' method 
        v Global variable 
        F Object field 
        f A function 
        p A property 
        t A type alias 
        s A type structure 
        e An enumeration 
        M A preprocessor macro 
    

Mam nadzieję, że komuś pomoże!

+0

Mam problem nawet z najnowszymi ctags: generowany jest teraz plik znaczników, ale taglista nic nie pokazuje. Czy masz pojęcie, co jest nie tak? –

+1

sprawdź 1. twoje tagi są załadowane na listę ': ustaw znaczniki' 2. ustawiłeś ustawienia taglisty': let tlist_objc_settings' (patrz punkt 4. mojej odpowiedzi) 3. Taglist automatycznie wyświetli tagi dla otwartego bufora 4. nawet bez taglisty możesz sprawdzić, czy twoje tagi są w porządku, używając standardowych poleceń vim, takich jak jump to tag spójrz na ': help tags' –

+0

Dziękuję, zrobiłeś mój dzień! W końcu działa :-) Początkowo tagi działały przy użyciu standardowych poleceń vim, ale nie w tagliście, po zmianie ustawień po prostu zatrzymały się za każdym razem, gdy otwarto taglistę. W końcu usunąłem ctags, które miałem (zainstalowałem je z Github i chociaż było dość aktualne) i ponownie zainstalowałem używając brew jak początkowo sugerowałeś i ... voila! Mam nadzieję, że pomoże, jeśli ktoś ma podobne objawy. –

1

AFAIK, ctags wspierają Cię w definiowaniu reguł dla nowego języka, zrobiłem to, gdy zrobiłem jakiś program przy użyciu laszlo (podobny do flex). Możesz przeczytać stronę podręcznika ctag, aby uzyskać więcej szczegółów, co nie jest trudne.

Uważam, że istnieje wtyczka vim filetype, która obsługuje rozwój pod kakao here, mam nadzieję, że jest dla ciebie przydatna.

1

Istnieje opcja użycia ctags dla celu-c. Możesz używać etags w trybie ctags. Etagi pochodzące z ctags jakiś czas temu, a w kodzie źródłowym znaczniki kompatybilne ctags będą generowane poprzez zdefiniowanie określonego przełącznika makro.

W rzeczywistości strona man w Mac OS już dokumentuje etagi i ctagi na tej samej stronie. Stwierdza, że ​​cel c jest obsługiwany w ctags. Powinieneś być w stanie wygenerować plik znacznika za pomocą następującej komendy: ctags -l objc *. [Mh]

Niestety program ctags w systemie Mac OS zachowuje się niezgodnie z dokumentacją, ponieważ Apple go zepsuł. Jednak udało mi się zainstalować tego rodzaju ctags za pomocą Ubuntu Linux i działa świetnie !!! Tam musisz zainstalować pakiet emacs22-bin-common.

W systemie Mac OS wszystko, co musisz zrobić, to skompilować ten pakiet dla siebie.

  • Pobierz odpowiedni pakiet źródłowy, np. z serwera Debiana (link).
  • exctract go i przejdź do katalogu źródłowego
  • prowadzony ./configure
  • Konfiguracja powraca z błędem, ponieważ nie może znaleźć lispref
  • Usunąłem wszystkie cele w varible config_files w utworzonym pliku config.status pomimo te z lib-src
  • metę ./config.status
  • cd lib-src
  • zrobić
  • skopiować np ctags/usr/local/bin i zmienić uprawnienia
    • sudo cp ctags/usr/local/bin
    • chmod a + Rx/usr/local/bin/Ctags

Jesteś Gotowe. Szczęśliwe tagowanie !!!

0

Druga odpowiedź: można zainstalować EMACS z MacPorts dość łatwo i będzie zawierał wersję etags w/opt/local/bin z obsługą Objective-C.

% sudo port install emacs 
% find . -name ‘*.[hm]’ -print0 | xargs −0 /opt/local/bin/etags 

A potem wewnątrz vim:

:setlocal tags=TAGS 

Działa to dobrze dla mnie MacVim.

+0

Ale będzie etags stworzyć odpowiedni plik tagi do pracy z VIM. Jestem kaleką w Emacs – esiegel

+0

Tak. Nie używam EMACS i używam tylko vi, vim lub MacVim. –

1

Możesz także wypróbować objcscope, które jest napisane przeze mnie.

objcsope

0

Można spróbować Fishman fork of Exuberant Ctags który ma Objective C i wsparcia CSS.

+0

Wyjściowe wyjście z tego jest niepoprawne. Jestem z tego powodu bardzo rozczarowany. –

0

Trudno było uzyskać oznaczenia tagów dla tagów przy pomocy ctags. Łatwiej było użyć wtyczki vim do edytora Objective-C. XVim działa z XCode. Jeśli używasz Appcode, tak jak ja, IdeaVim jest dobrze zintegrowany.

Chociaż nie można uzyskać pełnej funkcjonalności Vi/Vim za pomocą wtyczki. Uważam, że użycie kombinacji z natywnymi poleceniami IDE wystarcza, aby to zrekompensować.

0

Jeśli się nie mylę:

Najnowsze ctags teraz parsowania @property słowa kluczowego nieprawidłowo które mogłyby spowodować, że wszystkie słowa po @property w kodzie źródłowym są przetwarzane za właściwości, co prowadzi do bałagan w pliku tags.

muszę skompilować ctags (https://sourceforge.net/p/ctags/code/HEAD/tree/) komentując wszystko przetwarzania kluczowego nieruchomości w ObjC.c jako obejście.Mimo to pomaga tylko trochę lepiej odczytywać kod źródłowy w Taglist.

Nadal nie można poprawnie przeskoczyć (na przykład do metod implementacji z parametrami).

Próbowałem również tego (https://github.com/mcormier/ctags-ObjC-5.8.1), ale niestety to nie może w ogóle skoczyć.

Podsumowanie: wydaje się, że nie ma ctags dla ObjC tak wykonalnego jak dla C/C++.

0

Universal-ctags (https://ctags.io) może przechwytywać właściwości Objective-C.

[[email protected] objectivec_property.h.d]$ cat input.h 

@interface Person : NSObject { 
    @public 
     NSString *m_name; 
    @private 
     int m_age; 
} 

@property(copy) NSString *personName; 
@property(readonly) int personAge; 

-(id)initWithAge:(int)age; 
@end 
[[email protected] objectivec_property.h.d]$ ../../../ctags -x -o - input.h 
Person   interface  2 input.h   @interface Person : NSObject { 
initWithAge:  method  12 input.h   -(id)initWithAge:(int)age; 
m_age   field   6 input.h   int m_age; 
m_name   field   4 input.h   NSString *m_name; 
personAge  property  10 input.h   @property(readonly) int personAge; 
personName  property  9 input.h   @property(copy) NSString *personName;