Альтернативы 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;