objective-c xcode vim ctags cscope

objective c - Alternativas a Ctags/Cscope con Objective-c?



xcode vim (9)

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 compatibilidad con Objective-C compilada.

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

Y luego dentro de vim:

:setlocal tags=TAGS

Esto me funciona bien con MacVim.

¿Hay alternativas a ctags y cscope con 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.

Tal vez hay algún tipo de sistema de plugin como eclim, pero para xcode?

EDITAR

Así que parece que aparte de actualizar ctags para apoyar object-c, no tengo suerte. ¿Alguien sabe si cscope es el mismo?


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

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


Hay una opción para usar ctags para object-c. Puedes usar etags en modo ctags. Los etags derivados de ctags hace algún tiempo, y en su código fuente, las etiquetas compatibles se generarán mediante la definición de un determinado interruptor macro.

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

Desafortunadamente, el programa ctags en Mac OS no se comporta tan bien como Apple lo arruinó. ¡Sin embargo, logré instalar este tipo de ctags usando Ubuntu Linux y funciona muy bien! Ahí tienes que instalar el paquete emacs22-bin-common.

Entonces, bajo Mac OS, todo lo que tienes que hacer es compilar este paquete por ti mismo.

  • Descargue el paquete fuente correspondiente, por ejemplo, desde el servidor Debian ( link ).
  • extraerlo y cambiar al directorio de origen
  • ejecutar ./configure
  • Configura las devoluciones con un error porque no puede encontrar lispref.
  • Eliminé todos los destinos en archivos config configurables en el archivo config.status creado a pesar de los archivos con lib-src
  • ejecutar ./config.status
  • cd lib-src
  • hacer
  • Copie ctags, por ejemplo, a / usr / local / bin y cambie los permisos
    • sudo cp ctags / usr / local / bin
    • chmod a + rx / usr / local / bin / ctags

Estás listo. Feliz etiquetado !!!


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

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



Si no estoy equivocado :

Los últimos ctags ahora analizan la palabra clave @property incorrecta, lo que podría causar que todas las palabras después de @property en el código fuente se analicen como propiedades, lo que lleva a un lío en las tags archivo.

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

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 desafortunadamente esto no puede saltar en absoluto.

Resumen: parece que no hay ctags para ObjC tan factibles como para C / C ++.


También puedes probar el objeto que está escrito por mí.

objcsope


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


mucho tiempo después de esta pregunta, " jugando " con vim, quería el soporte de ObjC, especialmente con el complemento de lista de etiquetas. Encontré esa pregunta, luego cavé un poco, y aquí hay una solución no tan sucia :

  1. Se ha agregado un analizador ObjectiveC al troncal de CTags exuberantes , ¿aún no se ha publicado?
  2. Puede instalarlo fácilmente en OSX a través de homebrew:

    $ brew install ctags --HEAD

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

    $ ctags --langmap=ObjectiveC:.mh

  4. Luego agregué algo como esto a mi .vimrc para soporte de .vimrc de etiquetas:

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

    agregar cualquier tipo de interés que de la 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!