IGNORANT

Windows下vim编译安装YouCompleteMe插件

上一篇文章《Windows编译安装Vim/Gvim》是以安装ycm为目的而写的。ycm在vim插件中极为难装,在linux下就已经很难折腾了,更别说windows下安装这插件,安装错误真是多如牛毛。为什么非得安装ycm?对于本人来说,vim没有强大的插件,就变得和记事本一样,而ycm是vim强大插件之一。
由于网上关于windows下安装ycm的资料浩如烟海,即使本人一一尝试,本人并未找出最简洁的安装方案,所以以下部分操作可能是不必要的,希望能帮忙指出。

注:本文的某些软件版本已不是最新版,但大体方法可变通适用!

本文环境:

编译环境部署

1.Visual Studio 2017安装:官网https://visualstudio.microsoft.com/zh-hans/downloads/下载安装Visual Studio 2017,并安装使用C++的桌面开发支持。
2.Git和Python3.6.5的安装这已在上一篇文章中提及。
3.clang安装:在http://releases.llvm.org/download.html下载新版的Pre-Built Binaries包:Clang for Windows (64-bit) (.sig)得到LLVM-5.0.2-win64.exe打开安装,勾选添加到系统变量中。本文安装路径为E:\DevelopTools\LLVMCLANG\LLVM
4.cmake安装:在https://cmake.org/download/下载cmake-3.12.0-rc1-win64-x64.msi,打开安装即可。

下载ycm

E:\DevelopTools\Vim\vimfiles\bundle下右键Git Bash here然后执行:

git clone https://github.com/Valloric/YouCompleteMe.git 
cd YouCompleteMe 
git submodule update --init --recursive

等待下载完成。

编译ycm

在YouCompleteMe创建build文件夹。
打开Cmake-Gui,填写如下:
Where is the source code:E:/DevelopTools/Vim/vimfiles/bundle/YouCompleteMe/third_party/ycmd/cpp
Where to build the binaries:E:/DevelopTools/Vim/vimfiles/bundle/YouCompleteMe/build
选中Advanced。
点击configure,切换成Visual Studio 15 Win64
然后一般会报错(未报错就当报错处理),去掉USER_PYTHON2,再Configure。
修改PYTHON_LIBRARY的value值:E:/DevelopTools/python36/libs/python36.lib为你的Python3下的python36.lib
再勾选USE_CLANG_COMPLETER,修改PATH_TO_LLVM_ROOT的值:E:\DevelopTools\LLVMCLANG\LLVM为你的clang安装路径,需保证该路径下含有bin、include、lib...
继续Configure,直到没有报错,然后Generate。
出现NOT using clang-tidy for static analysis可以不管。(目前不知是何原因)

注:切记切换成Visual Studio 1x x64,不要使用默认的win32

安装ycm

然后使用cmd并cd到E:/DevelopTools/Vim/vimfiles/bundle/YouCompleteMe/build,执行:

cmake --build . --target ycm_core --config Release

~~如果LLVM以及MinGW在Path中,可以不做下面这一步:
然后 将E:\DevelopTools\msys2\mingw64\bin\libstdc++-6.dllE:\DevelopTools\msys2\mingw64\bin\libwinpthread-1.dllE:\DevelopTools\msys2\mingw64\bin\libgcc_s_seh-1.dllE:\DevelopTools\LLVMCLANG\LLVM\bin\libclang.dll拷贝到YouCompleteMe/third_party/ycmd。~~

配置ycm

E:\DevelopTools\Vim\vimfiles\bundle\YouCompleteMe\third_party\ycmd\examples\.ycm_extra_conf.py复制到%USERPROFILE%系统用户目录C:\Users\Julian
在用户目录的_vimrc中添加:

"YouCompleteMe
"配置默认文件路径
let g:ycm_global_ycm_extra_conf = 'C:/Users/Julian/.ycm_extra_conf.py'
"打开vim时不再询问是否加载ycm_extra_conf.py配置
let g:ycm_confirm_extra_conf = 0
set completeopt=longest,menu
"自动开启语义补全
let g:ycm_seed_identifiers_with_syntax = 1
"在注释中也开启补全
let g:ycm_complete_in_comments = 1
let g:ycm_collect_identifiers_from_comments_and_strings = 0
"字符串中也开启补全
let g:ycm_complete_in_strings = 1
let g:ycm_collect_identifiers_from_tags_files = 1
"开启基于tag的补全,可以在这之后添加需要的标签路径  
let g:ycm_collect_identifiers_from_tags_files = 1
"开始补全的字符数
let g:ycm_min_num_of_chars_for_completion = 2
"补全后自动关闭预览窗口
let g:ycm_autoclose_preview_window_after_completion = 1
"禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
"离开插入模式后自动关闭预览窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
"语法关键字补全
let g:ycm_seed_identifiers_with_syntax = 1  
"整合UltiSnips的提示
let g:ycm_use_ultisnips_completer = 1 
"在实现和声明之间跳转,并分屏打开
let g:ycm_goto_buffer_command = 'horizontal-split'
nnoremap <Leader>g :YcmCompleter GoTo<CR>
"与syntastic有冲突,建议关闭
let g:ycm_show_diagnostics_ui = 0
"let g:ycm_error_symbol = '>>'
"let g:ycm_warning_symbol = '>>'
let g:ycm_enable_diagnostic_signs = 0
let g:ycm_enable_diagnostic_highlighting = 0
let g:ycm_echo_current_diagnostic = 0

这样打开vim编写一个*.cc语言文件,有自动补全,但貌似不完整,比如说:#include<stdi被输入时,并不弹出stdio.h补全。解决方案:
修改用户目录下的.ycm_extra_conf.py,在flags=[里添加

'-x',
'c++',
'-isystem',
'D:/01DevelopToos/msys64/mingw64/include/c++/8.3.0',
'c',    #指定c语言
'-isystem',
'E:\DevelopTools/msys2/mingw64/x86_64-w64-mingw32/include',    #头文件包含

关于.ycm_extra_conf.py脚本配置可参考https://www.jianshu.com/p/5aaae8f036c1

此文有待完善。

参考文章:
1.http://www.cnblogs.com/tracyone/p/4735411.html
2.https://blog.csdn.net/beichen2012/article/details/52763491
3.https://blog.csdn.net/mergerly/article/details/51684155
4.https://www.jianshu.com/p/5aaae8f036c1

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »