Windows下安装VIM傻瓜教学一条龙

Author Avatar
LittleBlack 3月 18, 2020
  • 在其它设备中阅读本文章

本文转载自 https://github.com/CaseZheng/YouCompleteMe ,经过修改,侵删。

本文借鉴了http://josephpei.github.io/2013/10/29/vim-youcompleteme-on-64bit-windows/

编译环境

  • python 3.7.4 64位
  • golang 1.13.1 64位
  • Visual Studio 2019
  • cmake 3.16.0
  • Windows10

依赖环境

编译

git clone --depth=1 https://github.com/ycm-core/YouCompleteMe.git
cd YouCompleteMe
git submodule update --init --recursive
python install.py --all --clang-completer --clangd-completer --clang-tidy --msvc=16

如图所示,下面的结果是正常情况。如果出现“NOT using xxx”要警惕起来,很可能编译出来的是残次品。

image-20200320140752705

编译时碰到问题

libclang下载卡住(或者不成功)

  1. 首先下载libclang压缩包
  2. 考到你的YouCompleteMe\third_party\ycmd\clang_archives目录里
  3. 重新运行第四行命令。

NOT using clang-tidy

遇到这种情况可以再YouCompleteMe\third_party\ycmd\third_party下新建一个文件夹clang-tidy然后把llvm中的clang大礼包拷进去试试…我考进去然后加上参数-clang-tidy就没有报错了。

VIM提示SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes

这个是转义符的问题。py将路径中的\转义了,此时你需要在字符串前面添加r使这个字符串不转义。

其他什么奇奇怪怪原因

可以直接去这里下载预编译YCM。

配置YCM

YouCompleteMe\third_party\ycmd\examples\.ycm_extra_conf.py复制到你的VIM目录,配置vimrc文件

"YouCompleteMe
"配置默认文件路径
let g:ycm_global_ycm_extra_conf = 'D:\Vim\.ycm_extra_conf.py'
"打开vim时不再询问是否加载ycm_extra_conf.py配置
let g:ycm_confirm_extra_conf = 0
set completeopt=longest,menu
"自动开启语义补全
let g:ycm_seed_identifiers_with_syntax = 1
"在注释中也开启补全
let g:ycm_complete_in_comments = 1
let g:ycm_collect_identifiers_from_comments_and_strings = 0
"字符串中也开启补全
let g:ycm_complete_in_strings = 1
let g:ycm_collect_identifiers_from_tags_files = 1
"开启基于tag的补全,可以在这之后添加需要的标签路径  
let g:ycm_collect_identifiers_from_tags_files = 1
"开始补全的字符数
let g:ycm_min_num_of_chars_for_completion = 2
"补全后自动关闭预览窗口
let g:ycm_autoclose_preview_window_after_completion = 1
"禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
"离开插入模式后自动关闭预览窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
"语法关键字补全
let g:ycm_seed_identifiers_with_syntax = 1  
"整合UltiSnips的提示
let g:ycm_use_ultisnips_completer = 1 
"在实现和声明之间跳转,并分屏打开
let g:ycm_goto_buffer_command = 'horizontal-split'
nnoremap <Leader>g :YcmCompleter GoTo<CR>
"与syntastic有冲突,建议关闭
let g:ycm_show_diagnostics_ui = 0
"let g:ycm_error_symbol = '>>'
"let g:ycm_warning_symbol = '>>'
let g:ycm_enable_diagnostic_signs = 0
let g:ycm_enable_diagnostic_highlighting = 0
let g:ycm_echo_current_diagnostic = 0

打开命令行查找头文件目录。

g++ -E -x c++ - -v < nul
clang++ -E -x c++ - -v < nul

修改VIM目录下的.ycm_extra_conf.py,在flags=[里添加

'-x',
'c++',
'-std=c++11',
'-isystem',
r'[路径]',
'-isystem',
r'[路径]',
'-I'
'.'

此处路径每行一个。路径中的斜杠一律要用\

isystem用于系统头文件路径,I用于个人头文件路径。打开文件时ycm会先向上级目录查找有没有.ycm_extra_conf.py的存在,如果没有再去查全局。所以自己写项目有必要专门配置一个放在项目根目录。

截图

image-20200320151729371

本博客使用CC BY-NC-SA 3.0创作协议,转载请注明出处。
本文链接:https://www.hackblack.cn/posts/1644FHV/