您的位置:首页 > 其它

WIN8.1/WIN7 gvim 编译使用YCM(youcompleteme)(64/32)

2014-07-13 10:44 197 查看
如有不懂请猛戳这里

如有疑问请猛戳这里

如要转载请注明出处,谢谢

--------------------------------------------------------------------------------------------------------------------------------------------------

使用YCM有个美中不足的就是,文档或路径中不能包含中文(Unicode字符集),否则的话就不能自动补全

但是今天心血来潮在github上找到了解决方案。如果想看的话。用力戳我

                                                                                                                  ----------------2014/7/24   2:14 by CHC

[b]--------------------------------------------------------------------------------------------------------------------------------------------------
[/b]

[b]https://bitbucket.org/Haroogan/vim-youcompleteme-for-windows/overview#markdown-header-downloads
[/b]

[b]如果你不想编译的话可以直接使用老外已经编译好的。简单快捷直接上手。[/b]

[b]                                                                                                                  ----------------2015/5/19
  17:55 by CHC

[/b]

[b]--------------------------------------------------------------------------------------------------------------------------------------------------[/b]

http://blog.csdn.net/inf_force/article/details/37736383


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\cpp
DUSE_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=c++11'是支持c++11


上面所说的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 <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>
""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 = '<S-Space>'
""允许在字符串里补全(双引号)
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 <expr> <CR>       pumvisible() ? "\<C-n>" : "\<CR>"
"YcmForceCompileAndDiagnostics"
"YcmDebugInfo
nnoremap <leader>rr :YcmForceCompileAndDiagnostics<CR>
""错误
let g:ycm_error_symbol = '>>'
""警告
let g:ycm_warning_symbol = '>*'
""
let g:ycm_key_list_select_completion = ['<Down>']

你可以通过\rr来重编译。

或者可以通过:YcmDebugInfo来查看有什么问题。。

你可能遇到这种情况






这个应该是警告的,我的配置中>*是警告,>>是错误,这里明显不对上,这是因为Werror将警告当成错误了,可以修改flag参数,将Werror注释掉。然后保存。

#'-Werror',







是不是很有爱!?

当然写如果你对代码要求严格,建议还是不要注释。

其他:



你可能需要补全printf,scanf这些被include的函数。

但是输入的时候没有出现。



根据github上的说法是:手动调用补全快捷键来补全

补全快捷键默认是Ctrl+Space,但是输入法快捷键也是这个--_--!那么就冲突了,修改它。

我修改为Shift+Space

修改过后,手动补全

看图:










当然可以使用上,下来移动,或者可以使用C+N,C+P来前后选择。。

更多详情可以猛戳这里

转载请注明出处

[b]http://blog.csdn.net/inf_force/article/details/37736383
[/b]

注:这个插件是老外写的,但是使用YCM的时候,路径必须是英文的而且文本中不支持Unicode--_--!!




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐