Cómo obtener autocompletado inteligente de C ++

32

Algunos editores (como Visual Studio en Windows) realizan autocompletar C ++ que entienden C ++. Por ejemplo, dado:

#include <vector>

int main(void) {
  std::vector<int> v;
  v.i

En Visual Studio, el autocompletado sabe que el único método std::vector<int>que comienza con una i es insert.

¿Es posible obtener este tipo de autocompletado en vim?

Chris Jefferson
fuente
3
El complemento YouCompleteMe puede aprender términos para autocompletar y puede comprender los lenguajes de familia C.
alxndr
La documentación de @alxndr fue bastante confusa para mí en el caso de la instalación con vundle. Y tan pronto como comencé con él, ¡el servidor YCM se bloqueó!
Abhinav Gauniyal
YCM funciona para mí relativamente bien, a menos que tenga elementos pesados ​​de plantilla (boost.geo) en los que agrega muuuuuuuuucho peso al sistema. Mientras tanto, mi configuración es un desastre, es difícil extraer partes de YCM ...
johannes
@yo 'Esta pregunta es bastante específica para usar vim con C ++. Las soluciones probablemente no se aplicarán a alguien que use Vim para escribir Perl (y viceversa). Entonces c ++ me parece bien; pero, por supuesto, Vi y Vim Meta es el lugar adecuado para discutir eso.
derobert
2
@AbhinavGauniyal Eso suena similar a los problemas que he visto antes con el uso de YCM. ¿En qué sistema estás? Para OSX ver aquí . No estoy usando MacVim, pero instalé CMake con Homebrew. Luego cdedité al directorio de complementos de YCM ( ~/.vim/bundlepara mí) y corrí ./install --clang-completer.
bsmith89

Respuestas:

28

Realmente me gusta clang_complete para esto. Requiere un sonido metálico, y debes decirle dónde reside libclang en tu sistema. Después de eso, funciona de maravilla.

La gente puede sugerir YouCompleteMe, pero para ser honesto, ese complemento está muy inflado por lo que dice que hace, y requiere demasiados pasos para instalarlo. También lo tuve segfault Vim en múltiples ocasiones. No podría estar más feliz con clang_complete.

Esto es lo que obtengo cuando escribo v.:clang-complete

akshay
fuente
44
Convenido. He tenido muchos problemas con YCM (incluidos los valores predeterminados mencionados). E incluso después de horas de configuración, nunca lo tuve funcionando por completo.
CharlesL
1
Tuve el servidor de YCM bloqueado varias veces, esperando clang_complete, aquí hay información relevante para otros usuarios: github.com/Rip-Rip/clang_complete/blob/master/doc/…
Abhinav Gauniyal
1
Tuve lo contrario. YCM funcionó bien (incluso si se trataba de un PITA para instalar), pero tañido-completa nunca funcionó ...
Sardathrion - Restablecer Mónica
¿Puedes ocultar todo eso para que puedas ver tu código unas líneas más abajo?
Matt C
@MatthewCliatt, ¿ocultar qué? El menú emergente? No hay nada especial en el código. Está justo return 0debajo de ese menú emergente.
akshay
8

El complemento YouCompleteMe ( Link ) me ha funcionado muy bien. Utiliza libclang para generar la función de autocompletar, proporcionando una finalización precisa.

Tiene mucha personalización, especialmente cuando se trabaja con banderas de compilación. Puede editar el "generador de banderas" editando un script de Python por proyecto ( Ejemplo ). Pero, para mí, la principal ventaja es que es compatible con Clang Compilation Database ( Link! ). Esto significa que puede compilar su código normalmente y pedirle a clang que escupe todas las banderas que usa para la compilación, y usar esas banderas con YouCompleteMe. Muy útil si desea que su herramienta de autocompletado conozca sus definiciones de macro o la ubicación de todos los archivos de encabezados en su sistema sin ningún esfuerzo de escribirlo manualmente.

Allan Hasegawa
fuente
3

YouCompleteMe no es tan difícil de instalar, y ha sido bastante estable para mí, he migrado de clang_complete a YouCompleteMe hace años. Una cosa con la que estoy de acuerdo es que está repleto de un gran historial de confirmaciones, muchas dependencias internas y soporte para muchos idiomas que quizás no le interesen pero que terminen clonando sus submódulos asociados. Eso, eso es un problema con YouComplemeMe, aún así ... hace el trabajo.

He trabajado en una bifurcación con un propósito especial para admitir mejor C ++, puedes verificar este gif para mostrarlo:

https://s3.amazonaws.com/f.cl.ly/items/1e2F0A123h331c1G0L0R/SadBart.gif

Aprovecha la nueva información de parámetros que Clang puede proporcionar, puede obtener más información al respecto en este artículo mío: http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/ .

pepper_chico
fuente
Hoy uso coc.nvim + ccls en su lugar.
pepper_chico