用Objective-c替代Ctags / Cscope?

时间:2010-06-03 17:56:12

标签: objective-c xcode vim ctags cscope

是否有支持Objective-c的ctags和cscope的替代品。这确实与可可开发有关,因此我不可避免地会使用Xcode(可能应该)。我只是想知道我的Vim选项是什么。

也许有一些像eclim这样的插件系统,但对于xcode?

修改

所以看起来除了更新ctags以支持objective-c之外,我运气不好。有谁知道cscope是否相同?

9 个答案:

答案 0 :(得分:29)

在这个问题之后的很长一段时间里,“”一起使用vim,我想要ObjC支持,尤其是taglist插件。我发现了这个问题,然后挖了一下,这是一个不那么脏的解决方案:

  1. ObjectiveC解析器has been added to Exuberant CTags trunk,它尚未发布(但是?)
  2. 您可以通过自制程序轻松地在OSX上安装它:

    $ brew install ctags --HEAD

  3. 请注意,使用ctags时,.m被视为Matlab,.h被视为C ++。要覆盖,请使用:

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

  4. 然后我将这样的内容添加到我的.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
    
  5. 我希望这能帮助别人!

答案 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下,你所要做的就是自己编译这个软件包。

  • 下载相应的源包,例如来自Debian服务器(link)。
  • 将其删除并更改为源目录
  • 运行./configure
  • 配置返回错误,因为找不到lispref
  • 我删除了创建的文件config.status中varible config_files中的所有目标,尽管有lib-src
  • 运行./config.status
  • cd lib-src
  • 使
  • 复制ctags,例如到/ usr / local / bin并更改权限
    • sudo cp ctags / usr / local / bin
    • chmod a + rx / usr / local / bin / ctags

你完成了。快乐标记!!!

答案 3 :(得分:1)

你也可以试试我写的objcscope。

objcsope

答案 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;