Plug 'Valloric/YouCompleteMe'
编译 ycm_core 库,YCM 通过该库可以快速完成补全。
要完成 ycm_core 的编译,你需要先准备:
- Python 2 or Python 3 .请注意选择与你系统 Vim 架构一致的版本。推荐使用 Python 3.
- CMake .要把 CMake 配置到系统环境变量中。
- Visual Studio .安装时,选择 Desktop development with C++ in Workloads/开发窗口桌面程序.
- 7-zip .为 YCM 构建C族语言语意补全时需提供。
- libclang
- Clang 是一套开源编译器,可以编译 C/C++/Objective-C/Objectivve-C++.所以,如果你想要 YCM 支持以上语言的语意补全,那么你就需要下载 libclang,下载地址: official binaries from llvm.org ,下载完成后,使用 7-zip 抽取到某一目录中,我这里放在与 ./vim(vimfiles)同级目录,并改名为 LLVM。
开始编译 **ycm_core**库,一套 C++ 引擎库,使得 YCM 能有更快速的补全性能。
首先,在 ./vim(vimfiles)同级目录创建一个文件夹用来存放构建过程产生的文件:
cd /d D:\Program Files\Vim
mkdir ycm_build
cd ycm_build
接下来,我们需要产生 makefiles 文件。
如果不要求支持C族语言语意补全,输入下面内容:
cmake -G "<generator>" . C:/Users/icebg/vimfiles/plugged/YouCompleteMe/third_party/ycmd/cpp
- 在 Unix 系统中,
<generator>替换为Unix Makefiles\ - 在 Windows 系统中,
<generator>替换为:Visual Studio 12 Win64Visual Studio 14 Win64Visual Studio 15 Win64- 如果 Vim 是32位的话,移除上面的
Win64。
如果要求支持C族语言语意补全,输入下面内容:
cmake -G "Visual Studio 15 Win64" -DPATH_TO_LLVM_ROOT="D:\Program Files\Vim\LLVM" . "D:\Program Files\Vim\vimfiles/plugged/YouCompleteMe/third_party/ycmd/cpp"
上面代码运行完后,配置文件就已经产生了,接下来就可以编译库了:
cmake --build . --target ycm_core --config Release
配置,让 YCM 能使用C族补全代码库。
经过前面几个大步骤,我们已经完成了 YCM 的安装以及C族语言补全代码的链接库,最后要做的就是进行配置。
首先C:/Users/icebg/vimfiles/plugged/YouCompleteMe/third_party/ycmd/cpp/.ycm_extra_conf.py 文件放入到D:\Program Files\Vim/vimfiles
let g:ycm_server_python_interpreter="C:\Users\icebg\AppData\Local\Programs\Python\Python39\python.exe"
let g:ycm_global_ycm_extra_conf="D:/Program\ Files/Vim/vimfiles/.ycm_extra_conf.py"
这样, YouCompleteMe 就全部配置成功了,你可以尝试代开一个 cpp 文件,看下能不能进行代码补全
配置 .ycm_extra_conf.py
YCM 根据该文件决定C族语言的补全行为。
当打开一个代码文件时,YCM 将顺着文件所在的路径一直向上查找,搜索到第一个配置文件将立刻读入。如果搜索不到配置文件将加载全局配置文件。这时如果全局配置文件也没有找到则语法不全不会被启用。
对于其他我们希望 YCM 也能进行语意补全的库文件,我们可以在该文件内进行配置,在 flags 中添加 isystem 即可:
flags = [
···
···
'-isystem',
'D:/Test/include',
]
完整配置
let g:ycm_key_invoke_completion = '<M-/>' "default <C-Space>,modify to alt+/
" 自动补全配置
set completeopt=longest,menu " "让[ Vim ]的补全菜单行为与一般IDE一致(参考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口
inoremap <expr> <CR> pumvisible() ? "<C-y>" : "<CR>" "回车即选中当前项
"youcompleteme 默认tab s-tab 和自动补全冲突
let g:ycm_key_list_select_completion=['<c-n>']
let g:ycm_key_list_select_completion = ['<Down>']
let g:ycm_key_list_previous_completion=['<c-p>']
let g:ycm_key_list_previous_completion = ['<Up>']
let g:ycm_confirm_extra_conf=0 "关闭加载.ycm_extra_conf.py提示
"在注释输入中也能补全
let g:ycm_complete_in_comments = 1
"在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
"注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0
let g:clang_user_options='|| exit 0'
nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处
if IsUnix()
let g:ycm_server_python_interpreter='/usr/bin/python'
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
elseif IsWin32()
let g:ycm_server_python_interpreter="C:\Users\icebg\AppData\Local\Programs\Python\Python39\python.exe"
let g:ycm_global_ycm_extra_conf="D:/Program\ Files/Vim/vimfiles/.ycm_extra_conf.py"
endif