En pocas palabras, estoy en busca de un trabajo función de autocompletar para el editor Vim. He argumentado antes que Vim reemplaza por completo un IDE en Linux y, aunque eso es cierto, carece de una característica importante: autocompletar.
Sé acerca de Ctrl+ N, integración de Cubetas Exuberantes , Taglist , cppcomplete y OmniCppComplete . Lamentablemente, ninguno de estos se ajusta a mi descripción de "autocompletado de trabajo":
- Ctrl+N funciona bien (solo) si has olvidado cómo deletrear
class
, owhile
. Oh bien. - Ctags te da los rudimentos, pero tiene muchos inconvenientes.
- Taglist es solo un contenedor de Ctags y, como tal, hereda la mayoría de sus inconvenientes (aunque funciona bien para enumerar declaraciones).
- cppcomplete simplemente no funciona como se prometió, y no puedo entender qué hice mal, o si está "funcionando" correctamente y las limitaciones son por diseño.
- OmniCppComplete parece tener los mismos problemas que cppcomplete, es decir, la finalización automática no funciona correctamente. Además, el
tags
archivo una vez más debe actualizarse manualmente.
Soy consciente del hecho de que ni siquiera los IDE modernos y completos ofrecen una buena terminación del código C ++. Es por eso que he aceptado la falta de Vim en esta área hasta ahora. Pero creo que un nivel fundamental de finalización de código no es demasiado pedir, y de hecho es necesario para un uso productivo. Así que estoy buscando algo que pueda lograr al menos las siguientes cosas.
Conciencia de sintaxis . cppcomplete promete (pero no cumple para mí), la finalización automática correcta y consciente del alcance de lo siguiente:
variableName.abc variableName->abc typeName::abc
Y realmente, cualquier otra cosa es completamente inútil.
Configurabilidad . Necesito especificar (fácilmente) dónde están los archivos de origen y, por lo tanto, de dónde obtiene el script su información de autocompletado. De hecho, tengo un Makefile en mi directorio que especifica las rutas de inclusión requeridas. Eclipse puede interpretar la información que se encuentra allí, ¿por qué no también un script Vim?
Actualidad . Tan pronto como cambie algo en mi archivo, quiero que la finalización automática refleje esto. Yo no quiero gatillo manualmente
ctags
(o algo similar). Además, los cambios deben ser incrementales , es decir, cuando he cambiado un solo archivo que es completamente inaceptable para losctags
que re-analizar todo el árbol de directorios (que puede ser enorme).
¿Olvidé algo? Siéntase libre de actualizar.
Me siento cómodo con mucha configuración y / o retoques, pero no quiero programar una solución desde cero, y no soy bueno para depurar los scripts de Vim.
Una nota final, realmente me gustaría algo similar para Java y C #, pero supongo que es demasiado esperar: ctags
solo analiza los archivos de código y tanto Java como C # tienen marcos enormes y precompilados que tendrían que indexarse. Desafortunadamente, desarrollar .NET sin un IDE es aún más PITA que C ++.
fuente
sh
(lo que significa que está en mi biblioteca) y seguidos de la abreviatura de mi clase. Por ejemploshP
para laParser
clase. Entonces todo lo que necesita hacer es escribirshP
y presionar CTRL + p (o CTRL + n si lo desea) y obtener los miembros de la clase del último uso al primero (o primero al último si CTRL + n)clang_complete
es técnicamente el más sólido pero prohibitivamente lento debido a la falta de almacenamiento en caché de los resultados y la compilación parcial. Tengo que admitir que no he probado todas las respuestas porque algunas requieren una configuración complicada y lenta. Aguantaré la respiración por un complemento utilizable ahora que el sonido metálico finalmente permite a los desarrolladores crear AST a partir de fuentes de C ++ (hasta ahora, no había buenos analizadores gratuitos para C ++ disponibles).clang_complete
recientemente? Se puede usarlibclang
con el almacenamiento en caché ahora y, por lo tanto, debería ser más rápido.formatted like this
).Respuestas:
Prueba YouCompleteMe . Utiliza Clang a través de la interfaz libclang, que ofrece la terminación semántica de C / C ++ / Objective-C. Es muy parecido a clang_complete, pero sustancialmente más rápido y con coincidencia difusa.
Además de lo anterior, YCM también proporciona terminación semántica para C #, Python, Go, TypeScript, etc. También proporciona terminación no semántica basada en identificadores para lenguajes para los que no tiene soporte semántico.
fuente
También hay clang_complete que usa el
clang
compilador para proporcionar la finalización del código para proyectos de C ++. Hay otra pregunta con sugerencias de solución de problemas para este complemento.El complemento parece funcionar bastante bien siempre que el proyecto se compile, pero es prohibitivamente lento para proyectos grandes (ya que intenta una compilación completa para generar la lista de etiquetas).
fuente
clang_complete
complemento funciona bien en Cygwin y Windows. No puedo decir nada sobre grandes proyectos porque no tengo ninguno. :)según lo solicitado, aquí está el comentario que di anteriormente:
Echa un vistazo a esto:
este enlace debería ayudarlo si desea usar monodevelop en un MacOSX
Buena suerte y feliz codificación.
fuente
Acabo de encontrar el proyecto Eclim vinculado en otra pregunta . Esto parece bastante prometedor, al menos para la integración de Java.
fuente
Llego un poco tarde a la fiesta, pero autocomplpop podría ser útil.
fuente
es lo que buscas algo como intellisense?
insevim parece abordar el problema.
enlace a capturas de pantalla aquí
fuente
¿Alguien mencionó code_complete?
Pero no le gustaban los ctags, por lo que probablemente esto no sea lo que está buscando ...
fuente