vim autocomplete clang clang-complete libclang

Complementos de autocompletado semántico de la familia C para Vim(finalización de C/C++) usando Clang(clang_complete, YouCompleteMe)



autocomplete clang-complete (1)

clang_complete

Gracias por usar Vim para Windows , espero que lo disfruten.

Para resolver su problema, debe utilizar el archivo .clang_complete . Lea más sobre esto en :h clang_complete . En resumen, puede colocar este archivo en el directorio raíz de cualquiera de sus proyectos (es decir, para cada proyecto, este archivo puede ser diferente, lo que tiene mucho sentido, ya que diferentes proyectos tienen diferentes configuraciones de cadenas de herramientas). Aquí está el ejemplo para la cadena de herramientas MinGW-w64:

-ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++ -ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32 -ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/backward -ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include -ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include-fixed -ID:/Toolchains/x64/MinGW-w64/4.8.1/x86_64-w64-mingw32/include -ID:/Libraries/x64/MinGW-w64/4.8.1/Boost/1.54.0/include -ID:/Libraries/x64/MinGW-w64/4.8.1/Qt/4.8.5/include -ID:/Libraries/x64/MinGW-w64/4.8.1/Eigen/3.1.3/include "-ID:/Libraries/x64/MinGW-w64/4.8.1/Example with Spaces/0.0.1/include" -std=c++11 -DUNICODE

Cuando está editando algún archivo en el proyecto con Vim, clang_complete recorre todos los directorios principales del archivo editado hasta que se topa con el primer archivo .clang_complete para leer. Luego lee todos estos indicadores / interruptores / definiciones y los usa durante la invocación de libclang para completar.

Tu me completas

En estos días, ya no uso clang_complete . Hay un plugin de autocompletado semántico más poderoso para Vim. Es YouCompleteMe . Te recomiendo que lo pruebes. Para completar semánticamente los lenguajes de la familia C (C / C ++ / Objective-C / Objective-C ++) también usa libclang . Se basa en un sólido back-end de C ++ y, por lo tanto, es increíblemente rápido. Tiene una gran integración con syntastic (otro complemento debe tener Vim). Tiene la capacidad de saltar a definiciones, y así sucesivamente.

Ya que está escrito en C ++ y pegado a Vim a través de Python, tendrías que compilar el back-end de C ++. Para aliviar el dolor, puede descargar el complemento YCM precompilado y listo para usar desde mi Vim YouCompleteMe para Windows . Lo he construido para arquitecturas x86 y x64. El componente nativo se llama ycm_core.pyd . Como es habitual, la arquitectura de la compilación Vim que eligió debe coincidir con la compilación YCM (es decir, ycm_core.pyd ). YCM puede trabajar SOLAMENTE con Python 2 (no 3), así que asegúrese de tener la DLL de Python 2 (por ejemplo, python27.dll ) y el intérprete de Python 2 ( python.exe ) en la PATH entorno PATH .

Si necesita LLVM / Clang, también puede descargarlo de mí: LLVM para Windows . Una vez más, solo asegúrese de tener libclang.dll en la PATH entorno PATH (recomendado) O justo al lado de ycm_core.pyd . Una vez más, se admiten las arquitecturas x86 y x64, y una vez más, la arquitectura debe coincidir con las de Vim y YCM.

En cuanto a la finalización:

¿Debería encontrar mágicamente dónde está el STL?

¡Por supuesto no! Esto es solo un sistema de autocompletado basado en la interfaz de Clang. ¿Cómo se supone que sepa qué cadena de herramientas está utilizando actualmente para compilar su código? Puede usar cualquier cosa: Visual C ++, Borland C ++, GCC, MinGW, MinGW-w64, LLVM / Clang, etc. Cada uno de ellos tiene su propia biblioteca estándar y tiempo de ejecución incluido. Por lo tanto, en cada caso, tendría que especificar todas las rutas que utiliza su cadena de herramientas actual para encontrar las inclusión estándar.

Por ejemplo, en el caso de GCC, MinGW, MinGW-w64, puede ejecutar lo siguiente en el shell POSIX:

g++ -E -x c++ - -v < /dev/null

O en el símbolo del sistema de Windows:

g++ -E -x c++ - -v < nul

Y busque el siguiente extracto:

#include <...> search starts here: d:/toolchains/x64/mingw-w64/4.8.1/posix/seh/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++ d:/toolchains/x64/mingw-w64/4.8.1/posix/seh/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32 d:/toolchains/x64/mingw-w64/4.8.1/posix/seh/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/backward d:/toolchains/x64/mingw-w64/4.8.1/posix/seh/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include d:/toolchains/x64/mingw-w64/4.8.1/posix/seh/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include-fixed d:/toolchains/x64/mingw-w64/4.8.1/posix/seh/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/include End of search list.

Esto le indica que todas las rutas a estándar incluyen qué GCC, MinGW, MinGW-w64 usan implícitamente durante la compilación de su código.

Para LLVM / Clang, puedes hacer lo mismo:

clang++ -E -x c++ - -v < /dev/null

O:

clang++ -E -x c++ - -v < nul

Cuando conoce las rutas, puede agregarlas a .ycm_extra_conf.py . Por ejemplo, en mi caso:

''-I'', ''D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++'', ''-I'', ''D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32'', ''-I'', ''D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/backward'', ''-I'', ''D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include'', ''-I'', ''D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include-fixed'', ''-I'', ''D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/x86_64-w64-mingw32/include'',

Estoy usando Vim de 64 bits en Windows, esta versión de Haroogan :

+python27 +python33 +huge

Estoy tratando de usar clang_complete , así que tomé la biblioteca libclang.dll here y configuré mi vimrc correctamente. libclang.dll encuentra libclang.dll .

Sin embargo, cuando abro un archivo *.cpp ahora tengo un mensaje:

libclang no puede encontrar los libclang incorporados esto causará un código de finalización lento

pero no tengo ninguna finalización ...

Encontré esta publicación con el tipo que construye la versión de Vim que uso, pero no hay instrucciones claras sobre qué hacer. ¿Alguien puede ayudar aquí?

ACTUALIZAR

Aquí esta lo que hice:

  1. Tomó Vim YouCompleteMe para Windows
  2. Tomó LLVM para Windows
  3. Tomó el liclang.dll y lo pegó en el directorio python de YCM
  4. Tomó .ycm_extra_conf.py y lo pegó con mi archivo cpp

Casi funciona (no tengo ningún mensaje de error), pero sigo recibiendo: