Windows 安装 YouCompleteMe

简介

YouCompleteMe vim 下的一套代码补全引擎,简称 YCM。

安装成功 YCM 后,其代码补全性能甚至于可以与 VS 相媲美。但是,作为一个如此强大的 vim 插件,其安装过程也比其他一般插件要难过几个等级,因此,这篇博文用来记录下安装 YouCompleteMe 在 Windows 下的安装过程,争取将过程尽量说的充分又简洁。

YouCompleteMe 完整安装

注意:下面配置过程中所使用的应用请确保架构一致(都是32位或者都是64位的,千万不要混用)

  1. 确保 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 版本。

python dll

比如我系统的 Vim 就应该安装 Python 3.5.xx 版本。

如果你的 Vim 支持 Python 3,则输入:

:python3 print('test python dll')

结果出错时按上述 Python 2的做法重新选择一个正确的 Python 3版本进行安装。

  1. 使用 Vunlde 安装 YouCompleteMe
Plugin 'Valloric/YouCompleteMe'
  1. 编译 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。

  1. 开始编译 **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
  1. 经过前面几个大步骤,我们已经完成了 YCM 的安装以及C族语言补全代码的链接库,最后要做的就是进行配置,让 YCM 能使用C族补全代码库。

首先复制 * *Vim\vimfiles\bundle\YouCompleteMe\third_party\ycmd\cpp\.ycm_extra_conf.py* 文件放入到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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容