17

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

也许有某种类型的插件系统,比如 eclim,但是对于 xcode?

编辑

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

4

9 回答 9

30

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

  1. 一个 ObjectiveC 解析器已添加到 Exuberant CTags 主干,它还没有发布(还没有?)
  2. 您可以通过自制软件轻松地将其安装在 OSX 上:

    $ brew install ctags --HEAD

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

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

  4. .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
    

我希望这会对某人有所帮助!

于 2011-04-26T13:09:13.330 回答
3

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;
于 2017-04-12T18:02:34.267 回答
1

AFAIK,ctags 支持您为新语言定义一些规则,我在使用 laszlo(类似于 flex)进行一些开发时这样做了。您可以阅读 ctags 的手册页以获取更多详细信息,这并不难。

我发现这里有一个支持可可下开发的vim文件类型插件,希望对你有所帮助。

于 2010-06-04T01:25:56.463 回答
1

有一个选项可以将 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 下你所要做的就是自己编译这个包。

  • 例如从 Debian 服务器(链接)下载相应的源代码包。
  • 解压并切换到源目录
  • 运行./配置
  • configure 返回错误,因为它找不到 lispref
  • 我删除了已创建文件 config.status 中变量 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

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

于 2010-08-13T06:27:01.810 回答
1

你也可以试试我写的objcscope。

对象范围

于 2012-12-17T02:41:54.390 回答
0

建议另一个答案:您可以相当轻松地使用 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。

于 2010-08-17T14:56:02.713 回答
0

您可以尝试Exuberant Ctags 的 Fishman fork,它支持 Objective C 和 CSS。

于 2013-10-28T13:45:02.330 回答
0

我发现很难让 ctags 为标签栏生成标签。在 Objective-C 编辑器中使用 vim 插件更容易。 XVim与 XCode 一起工作。如果你像我一样使用 Appcode,IdeaVim集成得很好。

虽然您不会使用该插件获得完整的 Vi/Vim 功能。我发现与本机 IDE 命令混合使用足以弥补。

于 2014-04-23T13:11:49.817 回答
0

如果我没记错的话:

最新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。

于 2017-03-18T08:09:49.073 回答