vimrc plugin manager c++ vim ide autocomplete

c++ - vimrc - vim plugin manager



Autocompletado en Vim (7)

¿Alguien mencionó code_complete?

Pero no te gustaron los ctags, así que probablemente esto no sea lo que estás buscando ...

En pocas palabras, estoy buscando una función de autocompletado que funcione para el editor Vim. He argumentado antes que Vim reemplaza completamente un IDE en Linux y, si bien eso es cierto, carece de una característica importante: autocompletar.

Sé sobre Ctrl + N , integración de Ctags exuberantes , lista de Taglist , cppcomplete y OmniCppComplete . Por desgracia, ninguno de estos se ajusta a mi descripción de "trabajo de autocompletado"

  • Ctrl + N funciona bien (solo) si has olvidado cómo se escribe la class , o while . Oh bien.
  • Ctags te da los rudimentos pero tiene muchos inconvenientes.
  • Taglist es solo un contenedor 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 archivo de tags una vez más necesita actualizarse manualmente.

Soy consciente del hecho de que ni siquiera los IDEs modernos y completos ofrecen una buena terminación de 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 mucho pedir, y de hecho es necesario para un uso productivo. Así que estoy buscando algo que pueda lograr al menos las siguientes cosas.

  • Sintaxis de conciencia . Promesas cppcomplete (pero no se cumplen para mí), 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 finalización automática. De hecho, tengo un Makefile en mi directorio que especifica las rutas de acceso de inclusión requeridas. Eclipse puede interpretar la información que se encuentra allí, ¿por qué no un script Vim también?

  • Hasta la fecha Tan pronto como cambie algo en mi archivo, quiero que la finalización automática refleje esto. No quiero activar manualmente ctags (o algo similar). Además, los cambios deben ser incrementales , es decir, cuando he cambiado solo un archivo, es completamente inaceptable que ctags vuelva a analizar todo el árbol de directorios (que puede ser enorme).

¿Olvidé algo? Siéntase libre de actualizar.

Me siento cómodo con bastante configuración y / o retoques, pero no quiero programar una solución desde cero, y no soy bueno para depurar los scripts 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 enormes marcos precompilados que deberían ser indexados. Desafortunadamente, desarrollar .NET sin un IDE es incluso más un PITA que un C ++.


¿Es lo que buscas algo como intellisense?

insevim parece abordar el problema.

enlace a capturas de pantalla here


Acabo de encontrar el proyecto Eclim vinculado en otra pregunta . Esto parece bastante prometedor, al menos para la integración de Java.


Llego un poco tarde a la fiesta, pero autocomplpop puede ser útil.


Prueba YouCompleteMe . Utiliza Clang a través de la interfaz libclang, ofreciendo finalizació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 finalización semántica para C #, Python, Go, TypeScript, etc. También proporciona finalización no semántica, basada en el identificador para idiomas para los cuales no tiene soporte semántico.



También hay clang_complete que utiliza el compilador de clang para proporcionar la finalización de 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).