关于在Win
下使用vim
的教程,已经有了一些。关于在win
版本的vim
下使用YouCompleteMe
插件的教程,也已经有了一些。
但是,都有点旧了。主要问题点在于:
MSYS2
已经提供了足够好用的vim
和clang
的预编译版本,不用再去找源码和编译了;vim
毕竟还是用在开发上,既然开发多用MSYS2
环境,那么搞一个独立于MSYS2
的vim
意义不大;YouCompleteMe
插件的作者对win
很有些看法,所以提供的源码对Windows
(包括Windows
下的MSYS2
)支持不好,具体表现在:
+ Cmake
相关文件完全不考虑mingw
+ 官方gay♂hub
上的关于在Window
下*nix
环境下编译ycm
的教程,居然也已经过时了gay♂hub
上的相关内容很像,但是在 ~~新形势下~~也已经玩不转了。鉴于这些原因,我觉得重新写一个教程是有必要的。探索过程过于复杂,就不写了,只写简要步骤。
MSYS2 x64
版,在msys
主环境中安装make
工具,在mingw64
环境下安装基本的编译环境,包括gcc
相关,clang
相关,cmake
,python2
等(对python3
的支持还是不好);pacman -S vim
安装预编译的vim
,确认其支持python
插件;注意一点:这货是处在MSYS
环境下的,安装到这里之后意味着mingw32/64
两个分支中都可以用它;vundle
好用那么一点?vim
插件,做基本配置;Plug 'Valloric/YouCompleteMe', {'for': 'cpp'}
到.vimrc
中添加插件那一段;不要像某些教程教的再加上do:install ...
来搞自动编译一类的,因为mingw
环境下肯定自动不过去;vim
中:PlugInstall
来实际安装YouCompleteMe
插件,应该看到安装成功;但是,这时仅仅是安装了vim
这一块与ycm
核心进行交互的这一部分,ycm
核心必须在本机上编译;vim
的话,可以看到YouCompleteMe
抱怨说找不到核心库,必须按文档编译;输入:messages
可以查看完整错误信息;.vim/plugged/YouCompleteMe/third_party/ycmd
,新建各目录用来手动编译,我建议叫.build
,因为官方的自动编译脚本自护也在用它。cmake-gui
,编译目录自然就是新建的.build
,源码目录设置为.vim/plugged/YouCompleteMe/third_party/ycmd/cpp
,类型选择为MSYS
Makefiles,这一点与其他教程不同;clang-tidy
检查代码规范,我们是手动编译所以需要手动打开,强制增加一个bool
变量叫USE_CLANG_TIDY
,设置为true
;构建类型记得选Release
;USE_CLANG_COMPLETER
自然也要选上;clang
和boost
这两项他们都建议不选,所以我也没选;cmake
是否找到了正确的python
开发环境,这里我用的是mingw64子环境中安装的python,不是msys环境下的python;也许msys环境下的python也能用,但必须记住你用的是哪一个,保持一致很重要,很重要,很重要;INSTALL_PATH
无所谓,反正实际上用不着——所以这个CMake用的并不标准;YouCompleteMe\third_party\ycmd\cpp\CMakeLists.txt
添加如下几行(我加在的project语句后面):
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -include cmath")
add_definitions(-DBOOST_PYTHON_SOURCE)
add_definitions(-DBOOST_THREAD_BUILD_DLL)
add_definitions(-DMS_WIN64)
#include
语句的顺序。不多,十个左右吧,改一下make
一遍很快;tss_cleanup_implemented
什么的,没找到,没理;make
而不是mingw
中的mingw32-make
来编译;这一点很重要,如果用的是cmake
生成的用于mingw32-make
的文件,会报一大堆找不到头文件一类的错误,似乎是编译器不认cmake
中设置的包含目录,我没心情去一一改成绝对路径看它最终能不能编译;YouCompleteMe/third_party/ycmd/
文件夹中应该出现libclang.dll
文件和ycm_core.pyd
文件,没有的话检查哪里做错了;vim
中打开一个cpp
文件,YouCompleteMe
应该不会抱怨找不到核心库了,我这里换成了“你用python2编译的核心库,但现在路径里面的默认值是python3
,这个不行,需要设置xxxx”,同样是用:message
产看全部信息;python
解析器的方法,就是在.vimrc
里面加一行:let g:ycm_server_python_interpreter="/mingw64/bin/python2"
,注意,你刚才编译用的是哪里的python,这里就得设置成那个python,我一开始时编译用了mingw64
里面的python2
,运行环境设置成了msys2
里面安装的python2
,结果时错误信息回到了“没有检测到核心库”的状态,估计是相关进程直接崩了;.ycm_extra_conf.py
,所以补全功能发挥的不完整的信息),并且开始补全。