WIN8.1/WIN7 gvim 编译使用YCM(youcompleteme)(64/32)
如有不懂请猛戳这里
如有疑问请猛戳这里
如要转载请注明出处,谢谢
使用YCM有个美中不足的就是,文档或路径中不能包含中文(Unicode字符集),否则的话就不能自动补全
但是今天心血来潮在github上找到了解决方案。如果想看的话。用力戳我
----------------2014/7/24 2:14 by CHC
https://bitbucket.org/Haroogan/vim-youcompleteme-for-windows/overview#markdown-header-downloads
如果你不想编译的话可以直接使用老外已经编译好的。简单快捷直接上手。
----------------2015/5/19
17:55 by CHC
youcompleteme(以下简称YCM)是一款强大的自动补全工具。它在网上有很多资料。不懂问度娘。
官网的效果图:
好吧,= =原本是动态的放上来就成静态的了。
首先你需要bundle安装它。bundle的具体设置细节可以问度娘。其实也就需要git&bundle这个插件就可以。= =不多说。
首先gvim需要支持python27,我当前使用的
gvim7.4 MS-Windows 32位图形界面版本 带OLE支持
打开gvim,输入:version
+python/dyn
1.下载
Bundle ‘Valloric/ListToggle’
Bundle 'scrooloose/syntastic’Bundle ‘Valloric/YouCompleteMe’
syntastic是一款包含很多语言的语法与编码风格检查插件,即时,自动检测是否有语法错误。配合上YCM简直是吊的飞起。。
估计在下载YCM的话需要等待一会儿。
2.编译
首先你需要如下软件
1)LLVM (LLVM需要在path路径下)
2)CMAKE (CMAKE需要在path路径下)
3)python27 (python27需要在path路径下更高的版本没有试过,我当前使用的是这个版本)
4)VS2012(当然Mingw也行。但没试过。= =)
首先、
进入目录bundle\YouCompleteMe\third_party,在这个目录新建一个名为install文件夹
在ycmd下有个cpp我们要用cmake对它生成信息。。
打开命令行。cd进入到install这个文件夹,然后输入代码如下。。
cmake -G “Visual Studio 11” -DUSE_SYSTEM_LIBCLANG=ON -DPATH_TO_LLVM_ROOT=“D:\Progr
am Files (x86)\LLVM” …\ycmd\cppDUSE_SYSTEM_LIBCLANG是指是否支持系统libclang
DPATH_TO_LLVM_ROOT是指LLVM的绝对路径
当然你可以不使用libclang,就不需要加USE_SYSTEM_LIBLANG了。––!但是我目测加了这个的话可以直接拿到另一台电脑运行。因为我在WIN7下没有加那个,在WIN8下就要我重新编译––!恩。还没有验证。等有闲暇时间再验证是否可以。
(已验证,我在WIN8.1下的环境编译之后拿到WIN7 32bit居然可以直接运行(包含了LLVM,python的环境,但是电脑里有VS2012,我在没有VS2012的电脑里是无法运行的,难道是这个缘故?----2014/7/18添加))
打开VS2012开发人员命令提示(开始-所有程序-Microsoft Visual Studio 2012-Visual Studio Tools-VS2012 开发人员命令提示)
最后一步。
cd到install那个目录
输入代码
msbuild /t:ycm_core;ycm_client_support /property:configuration=Release YouCompleteMe.sln
要等好一会儿。。= =当初我在win7等了有估计十五分钟。在win8.1下居然只等了1:47.95一分多钟–_–!?
可能是我在win7下cmake的选项只有path_to_llvm的缘故吧?
这个步骤完了之后呢。会在你的
D:\Program Files (x86)\Vim\vimfiles\bundle\YouCompleteMe\third_party\ycmd目录下出现两个核心文件
ycm_client_support.pyd和ycm_core.pyd
还有它顺便把libclang.dll也给复制过来了。
然后呢,你可能遇到以下问题。
1)你可能打开gvim后会弹出一个框框。说什么c timeerror之类的。
这个时候你需要查看你的path变量路径下是否重复包含了msvcr90.dll,如果重复包含了msvcr90.dll,将之改名,使path变量路径下只包含一次msvcr90.dll(––!!这里你如果不想麻烦的话在编译时打开一些开关。但是我不知道––!,我只是一个acmer。)
-----add by 2015.5.19--------------
解决办法2:
在.vimrc第一行加入如下代码改变其$path值
比如:
let $path="D:/Program\ Files\ (x86)/LLVM/bin;D:/Python27;C:/Windows/system32;C:/Windows;D:/Program\ Files\ (x86)/Vim/vim74"这样就可以解决冲突了,你要确保msvcr90.dll在这些目录中只出现一次即可
(我的冲突是。cmake下的bin目录下有个msvcr90.dll)
它是c的运行库,如果没有弹框说明你是幸运的。无视之。
2)打开gvim后弹出一堆错误(并非弹窗)
这时你要确定python27在path路径下
只需要一个步骤 重启!!!= =我在win7下的时候没有重启都可以。但是在win8.1下还是需要重启
3)重启后如果还不行的话。就将python27.dll和msvcr90.dll复制到windows\system32目录下。
好,可以了,但是当你以cpp方式打开gvim时。
出现如下图。。
>>的那一行提示说无法找到iostream,看到下面那个小字了吗。
好了,这说明成功就在眼前。
在目录\vimfiles\bundle\YouCompleteMe\third_party\ycmd\cpp\ycm下有个文件名叫.ycm_extra_conf.py。
.ycm_extra_conf.py是默认配置文件,如果是做项目的话可以把.ycm_extra_conf.py复制到项目目录,然后修改flag中的参数。(flag参数稍后讲)这样当你打开cpp的时候会自动载入当前文件的配置文件。找不到的时候使用默认路径
默认路径可以在_vimrc中添加
let g:ycm_global_ycm_extra_conf =$VIM . ‘\vimfiles\bundle\YouCompleteMe\third_party\ycmd\cpp\ycm.ycm_extra_conf.py’
flag参数修改
恩,你可以先备份一个副本。然后右键-editwithxxx
打开之后flag中保存的是一系列参数。
'-std=c11’是支持c11
上面所说的iostream文件找不到,你可以将include文件用如下格式添加到flag[…]的末尾
恩。。比如说我用的是mingw
‘-isystem’,
‘D:/MinGW/lib/gcc/mingw32/4.8.1/include’,
‘-isystem’,
‘D:/MinGW/lib/gcc/mingw32/4.8.1/include/c++’,
‘-isystem’,
‘D:/mingw/lib/gcc/mingw32/4.8.1/include/c++/mingw32’,
= =记住c++可不止这一个include
我个去。。。= =路径中注意是反斜线啊。–_–!
好了。。这下彻底配置完结了。。
另:
配置代码附送:
"YCM插件的设置
nnoremap
""let g:ycm_global_ycm_extra_conf =‘D:\Documents\Tencent Files\414010421\FileRecv.ycm_extra_conf.py’
let g:ycm_global_ycm_extra_conf =$VIM . ‘\vimfiles\bundle\YouCompleteMe\third_party\ycmd\cpp\ycm.ycm_extra_conf.py’
""0为关闭载入配置文件提示
let g:ycm_confirm_extra_conf = 0
" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax = 1
""补全之后自动关闭preview
let g:ycm_autoclose_preview_window_after_completion = 1
""自动补全快捷键
let g:ycm_key_invoke_completion = ‘
""允许在字符串里补全(双引号)
let g:ycm_complete_in_strings = 1
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 在注释输入中也能补全
let g:ycm_complete_in_comments = 1
" 让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
set completeopt=longest,menu
" 离开插入模式后自动关闭预览窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
"回车即选中当前项
""inoremap
“YcmForceCompileAndDiagnostics”
"YcmDebugInfo
nnoremap
""错误
let g:ycm_error_symbol = ‘>>’
""警告
let g:ycm_warning_symbol = ‘>*’
“”
let g:ycm_key_list_select_completion = [‘
你可以通过\rr来重编译。
或者可以通过:YcmDebugInfo来查看有什么问题。。
你可能遇到这种情况
这个应该是警告的,我的配置中>*是警告,>>是错误,这里明显不对上,这是因为Werror将警告当成错误了,可以修改flag参数,将Werror注释掉。然后保存。
#‘-Werror’,
是不是很有爱!?
当然写如果你对代码要求严格,建议还是不要注释。
其他:
你可能需要补全printf,scanf这些被include的函数。
但是输入的时候没有出现。
根据github上的说法是:手动调用补全快捷键来补全
补全快捷键默认是Ctrl+Space,但是输入法快捷键也是这个–_–!那么就冲突了,修改它。
我修改为Shift+Space
修改过后,手动补全
看图:
当然可以使用上,下来移动,或者可以使用C+N,C+P来前后选择。。
更多详情可以猛戳这里
转载请注明出处
http://blog.csdn.net/inf_force/article/details/37736383
注:这个插件是老外写的,但是使用YCM的时候,路径必须是英文的而且文本中不支持Unicode–_–!!