Альтернативы Ctags/Cscope с Objective-c?

Есть ли альтернативы ctags и cscope с поддержкой Objective-c. Это относится к разработке cocoa, поэтому неизбежно кажется, что я буду использовать Xcode (и, вероятно, должен). Мне просто интересно, какие у меня варианты Vim.

Может быть, есть какой-то тип плагина, например eclim, но для xcode?

ИЗМЕНИТЬ

Итак, похоже, что кроме обновления ctags для поддержки objective-c мне не повезло. Кто-нибудь знает, является ли cscope одинаковым?

Ответы

Ответ 1

Долгое время после этого вопроса, "играя" с vim, мне нужна поддержка ObjC, особенно с плагином taglist. Я нашел этот вопрос, а потом немного выкопал, и вот это не так грязное решение:

  • Парень ObjectiveC был добавлен в Exuberant CTags trunk, он не выпущен (пока?)
  • Вы можете легко установить его на OSX через homebrew:

    $ brew install ctags --HEAD

  • Обратите внимание, что при использовании ctags .m рассматривается как Matlab, а .h рассматривается как С++. Чтобы переопределить, используйте:

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

  • Затем я добавил что-то вроде этого в мою поддержку .vimrc для поддержки taglist:

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

    добавьте любой тип, который вас интересует из этого списка:

    ctags --list-kinds=all
    ObjectiveC
        i  class interface
        I  class implementation
        p  Protocol
        m  Object 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
    

Я надеюсь, что это поможет кому-то!

Ответ 2

AFAIK, ctags поддерживают вас, чтобы определить некоторые правила для нового языка, я сделал это, когда сделал некоторые разработки, используя laszlo (аналогичный flex). Вы можете прочитать man-страницу ctags, чтобы получить более подробную информацию, что не сложно сделать.

Я нахожу, что есть плагин vty filetype, поддерживающий разработку под cocoa здесь, надеюсь, что это будет полезно для вас.

Ответ 3

Существует возможность использовать ctags для objective-c. Вы можете использовать etags в режиме ctags. etags, полученных из ctags некоторое время назад, и в своем исходном коде ctags совместимые теги будут генерироваться путем определения определенного макрокоманда.

Фактически страница man в Mac Os уже документирует etags и ctags на той же странице. Он утверждает, что objective-c поддерживается в ctags. Вы должны иметь возможность генерировать файл тега, используя следующую команду: ctags -l objc *. [mh]

К сожалению, программа ctags в Mac OS ведет себя не так, как задокументировано, так как Apple испортила ее. Однако мне удалось установить этот тип ctags с помощью Ubuntu Linux, и он отлично работает!!! Там вам нужно установить пакет emacs22-bin-common.

Итак, в Mac OS все, что вам нужно сделать, это собрать этот пакет для себя.

  • Загрузите соответствующий исходный пакет, например. с сервера Debian (ссылка).
  • exctract и перейдите в исходный каталог
  • запустить. /configure
  • configure возвращает с ошибкой, потому что не может найти lispref
  • Я удалил все цели в varible config_files в созданном файле config.status, несмотря на те, что были с lib-src
  • запустить. /config.status
  • cd lib-src
  • сделать
  • Скопировать ctags, например. в /usr/local/bin и разрешения на изменение
    • sudo cp ctags/usr/local/bin
    • chmod a + rx/usr/local/bin/ctags

Вы закончили. Счастливые пометки!!!

Ответ 4

Вы также можете попробовать objcscope, который написан мной.

objcsope

Ответ 5

По поводу другого ответа: вы можете легко установить EMACS с MacPorts, и он будет включать версию etags в /opt/local/bin, которая поддерживает Objective-C.

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

И затем внутри vim:

:setlocal tags=TAGS

Это хорошо работает для меня с MacVim.

Ответ 6

Вы можете попробовать Fishman fork Exuberant Ctags, который поддерживает Objective C и CSS.

Ответ 7

Мне было сложно получить ctags для создания тегов для tagbar. Было проще использовать vim-плагин для редактора Objective-C. XVim работает с XCode. Если вы используете Appcode, как я, IdeaVim хорошо интегрирован.

Хотя вы не сможете получить полную функциональность Vi/Vim с помощью плагина. Я считаю, что использование смешанного использования с собственными командами IDE достаточно для компенсации.

Ответ 8

Если я не ошибаюсь:

Последний ctags к настоящему времени разыгрывает ключевое слово @property неправильно, что может привести к тому, что все слова после @property в источнике код анализируются как свойства, что приводит к беспорядку в файле tags.

Мне нужно перекомпилировать ctags (https://sourceforge.net/p/ctags/code/HEAD/tree/), комментируя всю обработку ключевого слова property в ObjC.c как обходной путь. Несмотря на это, это помогает немного лучше читать исходный код в Taglist.

Он все еще не может прыгать (например, в реализацию методы с параметрами).

Я также пробовал это (https://github.com/mcormier/ctags-ObjC-5.8.1), но, к сожалению, это не может вообще прыгать.

Резюме:, кажется, что ctags для ObjC не работает как C/С++.

Ответ 9

Universal-ctags (https://ctags.io) может захватывать свойства 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;