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 ++.
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 usar libclang
con el almacenamiento en caché ahora y, por lo tanto, debería ser más rápido.
formatted like this
).
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)