在 Objective-c 支持下,是否有 ctags 和 cscope 的替代品。这确实与可可开发有关,所以我似乎不可避免地会使用 Xcode(并且可能应该)。我只是想知道我的 Vim 选项是什么。
也许有某种类型的插件系统,比如 eclim,但是对于 xcode?
编辑
所以似乎除了更新ctags来支持objective-c之外,我运气不好。有谁知道cscope是否相同?
在 Objective-c 支持下,是否有 ctags 和 cscope 的替代品。这确实与可可开发有关,所以我似乎不可避免地会使用 Xcode(并且可能应该)。我只是想知道我的 Vim 选项是什么。
也许有某种类型的插件系统,比如 eclim,但是对于 xcode?
编辑
所以似乎除了更新ctags来支持objective-c之外,我运气不好。有谁知道cscope是否相同?
在这个问题之后很长一段时间,“玩”vim,我想要 ObjC 支持,尤其是 taglist 插件。我发现了这个问题,然后挖掘了一下,这是一个不那么肮脏的解决方案:
您可以通过自制软件轻松地将其安装在 OSX 上:
$ brew install ctags --HEAD
请注意,使用 ctags 时,.m
被视为 Matlab 并被.h
视为 C++。要覆盖,请使用:
$ ctags --langmap=ObjectiveC:.m.h
.vimrc
然后我在我的 for 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
我希望这会对某人有所帮助!
Universal-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;
AFAIK,ctags 支持您为新语言定义一些规则,我在使用 laszlo(类似于 flex)进行一些开发时这样做了。您可以阅读 ctags 的手册页以获取更多详细信息,这并不难。
我发现这里有一个支持可可下开发的vim文件类型插件,希望对你有所帮助。
有一个选项可以将 ctags 用于objective-c。您可以在 ctags 模式下使用 etags。etags 前段时间从 ctags 衍生而来,在其源代码中会通过定义某个宏开关来生成 ctags 兼容的标签。
事实上,Mac Os 中的手册页已经在同一页面中记录了 etags 和 ctags。它指出 ctags 支持objective-c。您应该能够使用以下命令生成标签文件:ctags -l objc *.[mh]
不幸的是,Mac OS 中的 ctags 程序的行为不像记录的那样,因为 Apple 把它搞砸了。然而,我设法使用 Ubuntu Linux 安装了这种 ctags,效果很好!!!在那里你必须安装 emacs22-bin-common 包。
所以在 Mac OS 下你所要做的就是自己编译这个包。
你完成了。快乐标记!!!
你也可以试试我写的objcscope。
建议另一个答案:您可以相当轻松地使用 MacPorts 安装 EMACS,它将在 /opt/local/bin 包含一个 etags 版本,其中编译了 Objective-C 支持。
% sudo port install emacs
% find . -name ‘*.[hm]’ -print0 | xargs −0 /opt/local/bin/etags
然后在vim里面:
:setlocal tags=TAGS
这对我来说很适合 MacVim。
您可以尝试Exuberant Ctags 的 Fishman fork,它支持 Objective C 和 CSS。
如果我没记错的话:
最新
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),但不幸的是这根本不能跳。
摘要: ObjC 似乎没有像 C/C++ 那样可行的 ctags。