Альтернативы Ctags / Cscope с Objective-c? - PullRequest
16 голосов
/ 03 июня 2010

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

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

EDIT

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

Ответы [ 9 ]

29 голосов
/ 26 апреля 2011

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

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

    $ brew install ctags --HEAD

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

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

  4. Затем я добавил что-то вроде этого в свой .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'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
    

Надеюсь, это кому-нибудь поможет!

1 голос
/ 17 декабря 2012

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

objcsope

1 голос
/ 13 августа 2010

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

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

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

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

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

Вы сделали. Удачного вам тега !!!

1 голос
/ 04 июня 2010

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

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

0 голосов
/ 12 апреля 2017

Универсальные ctags (https://ctags.io) могут захватывать свойства Objective-C.

[jet@localhost 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
[jet@localhost 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;
0 голосов
/ 18 марта 2017

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

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

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

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

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

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

0 голосов
/ 23 апреля 2014

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

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

0 голосов
/ 28 октября 2013

Вы можете попробовать Форк Фишмана из Exuberant Ctags , который имеет поддержку Objective C и CSS.

0 голосов
/ 17 августа 2010

По поводу другого ответа: вы можете установить 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.

...