简介
YouCompleteMe 是 vim 下的一套代码补全引擎,简称 YCM。
安装成功 YCM 后,其代码补全性能甚至于可以与 VS 相媲美。但是,作为一个如此强大的 vim 插件,其安装过程也比其他一般插件要难过几个等级,因此,这篇博文用来记录下安装 YouCompleteMe 在 Windows 下的安装过程,争取将过程尽量说的充分又简洁。
YouCompleteMe 完整安装
注意:下面配置过程中所使用的应用请确保架构一致(都是32位或者都是64位的,千万不要混用)
- 确保 Vim 的版本为 7.4.1578 及以上,并且支持 Python 2 或者 Python 3.
如何查看 Vim 是否支持 Python2 或者 Python 3 ?
在 Vim 内,输入 :version
,找到+python/dyn
,+python3/dyn
,+
号表示支持,-
表示不支持。至少有一个+
才表示 Vim 支持 Python。
查看 Vim 是否能调用 Python 动态链接库 ?
上面的检测步骤做完,确定 Vim 支持 Python后,在 Vim 内输入:
:echo has('python') || echo has('python3')
如果上面返回1,那表明你的 Vim 能识别到 Python 动态链接库,配置通过。
如果返回0,表明配置失败,则进行如下判断:
首先,确保你系统已经安装了 Python,否则,先安装在按上面的步骤重新进行判断。
如果你确认系统已经安装了 Python,那就应该是 Python 版本错误。检测方法首先是从前面所讲的步骤中找到你的 Vim 是所支持的 Python 的版本:
如果支持 Python 2,则在 Vim 内输入:
:python print('test python dll')
如果出现下图所示结果,则表明当前你系统安装的 Python Vim 无法识别到,此时你要重新安装错误提示的那个 Python 版本。
比如我系统的 Vim 就应该安装 Python 3.5.xx 版本。
如果你的 Vim 支持 Python 3,则输入:
:python3 print('test python dll')
结果出错时按上述 Python 2的做法重新选择一个正确的 Python 3版本进行安装。
- 使用 Vunlde 安装 YouCompleteMe
Plugin '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++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 <your-vim-path>
mkdir ycm_build
cd ycm_build
接下来,我们需要产生 makefiles 文件。
如果不要求支持C族语言语意补全,输入下面内容:
cmake -G "<generator>" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
其中,在 Unix 系统中,<generator>
替换为 Unix Makefiles
在 Windows 系统中,<generator>
替换为:
Visual Studio 12 Win64
Visual Studio 14 Win64
Visual Studio 15 Win64
如果 Vim 是32位的话,移除上面的 Win64
。
如果要求支持C族语言语意补全,输入下面内容:
cmake -G "Visual Studio 15 Win64" -DPATH_TO_LLVM_ROOT="D:\Program Files (x86)\Vim\LLVM" . "D:\Program Files (x86)\Vim\vimfiles/bundle/YouCompleteMe/third_party/ycmd/cpp"
上面是我电脑上的配置,读者更换为自己的相应路径即可。
上面代码运行完后,配置文件就已经产生了,接下来就可以编译库了:
cmake --build . --target ycm_core --config Release
- 经过前面几个大步骤,我们已经完成了 YCM 的安装以及C族语言补全代码的链接库,最后要做的就是进行配置,让 YCM 能使用C族补全代码库。
首先复制 * Vim\vimfiles 目录下。
然后,在 _vimrc 内增加如下内容:
let g:ycm_server_python_interpreter="D:/Program\ Files\ (x86)/Python/python2/python.exe"
let g:ycm_global_ycm_extra_conf="D:/Program\ Files\ (x86)/Vim/vimfiles/.ycm_extra_conf.py"
这样, YouCompleteMe 就全部配置成功了,你可以尝试代开一个 cpp 文件,看下能不能进行代码补全 :)
如有疑问之处,请查看官方文档:[Full Installation Guide])https://github.com/Valloric/YouCompleteMe#full-installation-guide)
配置 .ycm_extra_conf.py
YCM 根据该文件决定C族语言的补全行为。
当打开一个代码文件时,YCM 将顺着文件所在的路径一直向上查找,搜索到第一个配置文件将立刻读入。如果搜索不到配置文件将加载全局配置文件。这时如果全局配置文件也没有找到则语法不全不会被启用。
对于其他我们希望 YCM 也能进行语意补全的库文件,我们可以在该文件内进行配置,在 flags 中添加 isystem 即可:
flags = [
···
···
'-isystem',
'D:/Test/include',
]
完整配置
下面部分是我 YouCompleteMe 的全部配置内容:
Plugin 'Valloric/YouCompleteMe'
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="D:/Program\ Files\ (x86)/Python/python2/python.exe"
let g:ycm_global_ycm_extra_conf="D:/Program\ Files\ (x86)/Vim/vimfiles/.ycm_extra_conf.py"
endif
vimrc 全部配置,请查看:_vimrc