是否有支持Objective-c的ctags和cscope的替代品。这确实与可可开发有关,因此我不可避免地会使用Xcode(可能应该)。我只是想知道我的Vim选项是什么。
也许有一些像eclim这样的插件系统,但对于xcode? p>
修改
所以看起来除了更新ctags以支持objective-c之外,我运气不好。有谁知道cscope是否相同?
答案 0 :(得分:29)
在这个问题之后的很长一段时间里,“和”一起使用vim,我想要ObjC支持,尤其是taglist插件。我发现了这个问题,然后挖了一下,这是一个不那么脏的解决方案:
您可以通过自制程序轻松地在OSX上安装它:
$ brew install ctags --HEAD
请注意,使用ctags时,.m
被视为Matlab,.h
被视为C ++。要覆盖,请使用:
$ ctags --langmap=ObjectiveC:.m.h
然后我将这样的内容添加到我的.vimrc
以获取标记列表支持:
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 :(得分:1)
AFAIK,ctags支持你为一种新语言定义一些规则,当我使用laszlo(类似于flex)进行一些开发时,我就这样做了。您可以阅读ctags的联机帮助页以获取更多详细信息,这并不难。
我发现有一个vim文件类型插件支持cocoa here下的开发,希望它对你有所帮助。
答案 2 :(得分:1)
可以选择将ctags用于objective-c。您可以在ctags模式下使用etags。 etags不久前从ctags派生而来,在源代码中,ctags兼容标签将通过定义某个宏开关生成。
事实上,Mac Os中的手册页已经在同一页面中记录了etags和ctags。它声明在ctags中支持objective-c。您应该能够使用以下命令生成标记文件: ctags -l objc *。[mh]
不幸的是,自从Apple搞砸了以来,Mac OS中的ctags程序就没有记录。然而我设法使用Ubuntu Linux安装这种ctags,它工作得很好!你必须安装emacs22-bin-common软件包。
因此,在Mac OS下,你所要做的就是自己编译这个软件包。
你完成了。快乐标记!!!
答案 3 :(得分:1)
你也可以试试我写的objcscope。
答案 4 :(得分:0)
另一个答案是:您可以非常轻松地安装EMACS和MacPorts,它将在/ 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。
答案 5 :(得分:0)
您可以尝试具有Objective C和CSS支持的Fishman fork of Exuberant Ctags。
答案 6 :(得分:0)
我发现很难让ctags为tagbar生成标签。为Objective-C编辑器使用vim插件更容易。 XVim适用于XCode。如果您像我一样使用Appcode,IdeaVim已经很好地集成了。
虽然您无法使用该插件获得完整的Vi / Vim功能。我发现混合使用本机IDE命令足以弥补。
答案 7 :(得分:0)
如果我没错:
最新
ctags
现在错误地解析@property
关键字, 这可能导致源中@property
之后的所有单词 代码被解析为属性,导致文件tags
中的混乱。
我必须通过评论ObjC.c
中的所有属性关键字处理作为解决方法来重新编译ctags(https://sourceforge.net/p/ctags/code/HEAD/tree/)。尽管如此,只有在阅读Taglist中的源代码时才能有所帮助。
它仍然无法跳转(例如,实施 方法参数)正确。
我也尝试了这个(https://github.com/mcormier/ctags-ObjC-5.8.1),但不幸的是,这根本无法跳过。
摘要:似乎没有ObjC的ctags可用于C / C ++。
答案 8 :(得分:0)
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;