2010-06-03 18 views
16

¿Hay alguna alternativa a ctags y cscope con el soporte de Objective-c. Esto tiene que ver con el desarrollo del cacao, así que inevitablemente parece que usaré Xcode (y probablemente debería). Me preguntaba cuáles son mis opciones de Vim.Alternativas a Ctags/Cscope con Objective-c?

Tal vez exista algún tipo de sistema de complementos como eclim, pero para xcode?

EDITAR

por lo que parece que, aparte de la actualización de ctags para apoyar Objective-C, estoy fuera de suerte. ¿Alguien sabe si cscope es el mismo?

+0

Quizás sea un poco tarde para responder, pero se han propuesto varios parches para agregar el objetivo C de compatibilidad con los ctags, por lo que debería ser para la próxima versión. En cuanto a cuándo se lanzará, ese es un problema realmente diferente ... –

+1

Ahora hay un analizador Objective C que funciona en el maletero ... ver mi respuesta –

Respuesta

27

mucho tiempo después de esta pregunta, "jugando" con vim, quería compatibilidad con ObjC, especialmente con el plugin taglist. He encontrado esa pregunta, entonces cavé un poco, y aquí es una solución no tan sucia:

  1. Un ObjectiveC analizador has been added to Exuberant CTags trunk, no se libera (¿todavía?)
  2. Usted puede instalar fácilmente en OSX través homebrew:

    $ brew install ctags --HEAD

  3. Tenga en cuenta que cuando se utiliza ctags, .m se trata como Matlab y .h se trata como C++. Para anular, utilice:

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

  4. Luego añade algo como esto a mi .vimrc de apoyo taglist:

    let tlist_objc_settings = 'ObjectiveC;P:protocols;i:interfaces;types(...)'

    añadir ningún interés de tipo que de esa lista:

    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 
    

¡Espero que eso ayude a alguien!

+0

Tiene un problema incluso con los últimos ctags: ahora se genera el archivo de etiquetas, pero el taglist no muestra nada. ¿Tienes alguna idea de lo que está mal? –

+1

check 1. tus etiquetas se cargan en esa lista ': set tags' 2. has configurado taglist settings': let tlist_objc_settings' (mira el punto 4. de mi respuesta) 3. taglist mostrará automáticamente las etiquetas de un búfer abierto 4. incluso sin taglist, puede comprobar que sus etiquetas están bien utilizando los comandos vim estándar, como saltar a la etiqueta, mirar ': help tags' –

+0

¡Gracias, me alegraste el día! Finalmente funciona :-) Inicialmente, las etiquetas funcionaban con comandos vim estándar, pero no en taglist, después de cambiar la configuración, se detenía cada vez que se abría taglist. Así que finalmente eliminé ctags que tenía (los he instalado de Github y aunque era lo suficientemente reciente) y los reinstalé utilizando brew como sugirieron inicialmente y ... ¡voilá! Espero que ayude si alguien tiene síntomas similares. –

1

AFAIK, ctags lo ayudan a definir algunas reglas para un nuevo idioma, lo hice cuando hice algún desarrollo usando laszlo (similar a flex). Puede leer la página de manual de ctags para obtener más detalles, eso no es difícil de hacer.

Me parece que hay un complemento de tipo de archivo vim que admite el desarrollo en cacao here, espero que sea útil para usted.

1

Hay una opción para usar ctags para objetivo-c. Puedes usar etags en el modo ctags. etags derivados de ctags hace algún tiempo, y en su código fuente las etiquetas compatibles ctags se generarán definiendo un determinado macrointerruptor.

De hecho, la página man en Mac Os ya documenta etags y etiquetas en la misma página. Establece que objetivo-c es compatible con ctags. Debería poder generar un archivo de etiqueta usando el siguiente comando: ctags -l objc *. [Mh]

Desafortunadamente, el programa ctags en Mac OS se comporta no como documentado desde que Apple lo dañó. ¡Sin embargo, logré instalar este tipo de ctags usando Ubuntu Linux y funciona genial! Allí tienes que instalar el paquete emacs22-bin-common.

Por lo tanto, en Mac OS, todo lo que tiene que hacer es compilar este paquete para usted.

  • Descargue el paquete fuente correspondiente, p. del servidor de Debian (link).
  • extracto seco de ella y cambiar al directorio de origen
  • plazo ./configure
  • vuelve configure con un error porque no puede encontrar lispref
  • He eliminado todos los objetivos en config_files varible en el config.status archivo creado a pesar de la que tienen lib-src
  • plazo ./config.status lib-src
  • cd
  • hacer
  • Copia ctags por ejemplo, a/usr/local/bin y de cambio de permisos
    • sudo cp ctags/usr/
    • chmod a + Rx/usr// bin/ctags locales locales/bin

Estás hecho. Feliz etiquetado!

0

A propósito de la otra respuesta: puede instalar EMACS con MacPorts con bastante facilidad e incluirá una versión de etags en/opt/local/bin que tiene el soporte Objective-C compilado.

% sudo port install emacs 
% find . -name ‘*.[hm]’ -print0 | xargs −0 /opt/local/bin/etags 

y luego dentro de vim:

:setlocal tags=TAGS 

Esto funciona bien para mí con MacVim.

+0

Pero los etags crean un archivo de etiquetas adecuado para trabajar con VIM. Estoy lisiado en Emacs – esiegel

+0

Sí. No uso EMACS, y solo uso vi, vim o MacVim. –

1

También puedes probar objcscope escrito por mí.

objcsope

0

Usted puede intentar Fishman fork of Exuberant Ctags que tiene el objetivo C y soporte de CSS.

+0

El resultado de obj-c es abismal. Estoy muy decepcionado con eso. –

0

Me resultó difícil conseguir etiquetas para generar etiquetas para la barra de etiquetas. Era más fácil usar un complemento vim para el editor Objective-C. XVim funciona con XCode. Si usa Appcode como yo, IdeaVim está bien integrado.

Aunque no obtendrá la funcionalidad completa de Vi/Vim con el complemento. Creo que el uso de mezcla con comandos IDE nativos es suficiente para compensar.

0

si no estoy equivocado:

reciente ctags por ahora analizar la palabra clave @property incorrectamente, que podría causar que todas las palabras después de @property en el código fuente se analizan a ser propiedades, lo que lleva a una lío en el archivo tags.

que tienen que volver a compilar ctags (https://sourceforge.net/p/ctags/code/HEAD/tree/) comentando todo el procesamiento de palabras clave en la propiedad ObjC.c como una solución.Aunque solo ayuda a mejorar un poco el código fuente en Taglist.

Todavía no puede saltar (por ejemplo, a los métodos de implementación con parámetros) correctamente.

También probé esto (https://github.com/mcormier/ctags-ObjC-5.8.1), pero lamentablemente esto no puede saltar en absoluto.

Sumario: Parece que no hay ctags para ObjC tan viables como para C/C++.

0

Universal-ctags (https://ctags.io) puede capturar las propiedades de 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;