不得不说,这个插件好用是好用,但安装起来真的相当麻烦
1、vim最低要求8.1+(这个要手动编译安装,具体看我上一篇)
Vim must have a working Python 3.6 runtime, compiled with
--enable-shared
(or--enable-framework
). You can check with:py3 import sys; print( sys.version )
.
2、Python3.6+
3、GCC 要求8以上,Clang要求7以上,CMake要求3.13以上,提前检查编译器版本
这一步自行解决了,网上教程多,准备好编译环境以后,我们开始下载代码
一、通过插件管理软件下载源码
二、Github Clone下载源码
这里我只尝试了第二种,官方给的例子是Ubuntu的,笔者是某腾云Centos8系统
1、下载源码(--recursive递归submodules)
git clone --recursive https://github.com/ycm-core/YouCompleteMe.git
YCM主仓库包含很多子仓库,需要全部抓取下来
不加--recursive也用可以下面代码克隆子仓库
cd ~/.vim/bundle/YouCompleteMe
git submodule update --init --recursive
说实在话,这一步是最难,因为国内网络环境的问题(你懂的,我挂了一天都下载不完,一直unable to acess,网上找了一堆方法,包括什么镜像加速试了都不行,不知道是不是失效了还是我这边网络不给力,最后用某科学手段下载下来,再打包传到服务器上离线安装了,打包后170M左右
2、安装YCM
当前工作路径先切到 ~/.vim/bundle/YouCompleteMe 下。
python ./install.py --clang-completer
这里根据自己需要进行配置,我主要是python、C,只加了Clang支持
#语言支持:
C/C++/Objective-C/Objective-C++:编译时添加--clang-completer
C#:先安装Mono,编译时添加--cs-completer
Go:先安装Go,编译时添加--go-completer
TypeScript:先安装 Node.js and npm,然后使用npm install -g typescript安装TypeScript SDK
JavaScript: 先安装 Node.js and npm,编译时添加--js-completer
Rust: 先安装Rust,编译时添加--rust-completer
Java: 先安装JDK8,编译时添加--java-completer
全部支持:先安装所有的依赖环境,编译时添加--all
大概等待十几分钟吧,编译完成后,YCM插件就安装完成了
3、YCM配置文件(非必须
很多博客这里会把examples文件夹底下的.ycm_extra_conf.py拷贝到 ~/.vim/bundle/YouCompleteMe里,但不知道是不是YCM插件更新了,笔者这里安装好后~/.vim/bundle/YouCompleteMe底下已经有一个配置文件了
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py
如果没有那也可以自己复制一份过去,然后根据需要进行配置
4、启动YCM插件
提前安装好Vim的插件管理器Vundle或者Vim-Plug,我这里用的是Vim-Plug,安装方式都很简单,可以看官方例子
往~/.vimrc Vim配置文件里面添加如下,然后输入:Source ~./vimrc 重载配置文件,:wq保存文件后,YCM插件就启动成功了
call plug#begin('~/.vim/bundle')
Plug 'Valloric/YouCompleteMe'
call plug#end()
也可以根据自己需要,修改.vimrc配置
" 设置默认的配置文件,可以按照上文攥写的位置来修改,笔者修改了位置 "
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py'
"打开vim时不再询问是否加载ycm_extra_conf.py配置"
let g:ycm_confirm_extra_conf=0
set completeopt=longest,menu
"python解释器路径"
let g:ycm_path_to_python_interpreter='/usr/bin/python'
"是否开启语义补全"
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_min_num_of_chars_for_completion=2
"补全后自动关机预览窗口"
let g:ycm_autoclose_preview_window_after_completion=1
" 禁止缓存匹配项,每次都重新生成匹配项"
let g:ycm_cache_omnifunc=0
"字符串中也开启补全"
let g:ycm_complete_in_strings = 1
"离开插入模式后自动关闭预览窗口"
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
"回车即选中当前项"
inoremap <expr> <CR> pumvisible() ? '<C-y>' : '\<CR>'
"上下左右键行为"
inoremap <expr> <Down> pumvisible() ? '\<C-n>' : '\<Down>'
inoremap <expr> <Up> pumvisible() ? '\<C-p>' : '\<Up>'
inoremap <expr> <PageDown> pumvisible() ? '\<PageDown>\<C-p>\<C-n>' : '\<PageDown>'
inoremap <expr> <PageUp> pumvisible() ? '\<PageUp>\<C-p>\<C-n>' : '\<PageUp>'
参考资料:
GitHub - ycm-core/YouCompleteMe: A code-completion engine for Vim
在CentOS 8上安装YouCompleteMe插件_SVRach的博客-CSDN博客_centos安装youcompleteme