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.
Puede probar la bifurcación Fishman de Exuberant Ctags que tiene compatibilidad con Objective C y CSS.
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 lastags
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í.
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 :
- Se ha agregado un analizador ObjectiveC al troncal de CTags exuberantes , ¿aún no se ha publicado?
Puede instalarlo fácilmente en OSX a través de homebrew:
$ brew install ctags --HEAD
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
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!