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 loslibclang
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:
- Tomó Vim YouCompleteMe para Windows
- Tomó LLVM para Windows
- Tomó el liclang.dll y lo pegó en el directorio python de YCM
- Tomó .ycm_extra_conf.py y lo pegó con mi archivo cpp
Casi funciona (no tengo ningún mensaje de error), pero sigo recibiendo: