YouCompleteMe
1.1、YouCompleteMe简介
for short:YCM
是什么 ?:a code-completion engine for Vim.
开发语言:VimL + C
官方主页:http://www.vim.org
源码仓库:
1.2、通过vim-plug安装YouCompleteMe

step1、安装依赖

下载时git
编译时cmakegmake | ninja、 ( gcc + g++ ) / GCC | Clang / LLVMCPython ( bindev ) 
运行时CPython ( binlib ) 

step2、使用git下载YouCompleteMe源代码

https://github.com/Valloric/YouCompleteMe
镜像

示例:

git -C ~/.vim/bundle clone https://gitee.com/mirrors/youcompleteme.git

step3、进入YouCompleteMe源代码根目录

cd ~/.vim/bundle/youcompleteme

step4、查看YouCompleteMe的源代码根目录中的内容

提示:install.py就是安装YouCompleteMePython脚本,后面会用到。

step5、使用git下载子模块的代码

git submodule update --init
注意:请不要画蛇添足的加上--recursive参数,后面会知道原因。

step6、将third_party/ycmd/.gitmodules中的go.googlesource.com字符串替换为github.com/golang

sed -i".bak" "s@go.googlesource.com@github.com/golang@g" ./third_party/ycmd/.gitmodules

step7、将third_party/ycmd/build.py中的download.eclipse.org字符串替换为mirrors.ustc.edu.cn/eclipse

sed -i".bak" "s@download.eclipse.org@mirrors.ustc.edu.cn/eclipse@g" ./third_party/ycmd/build.py

step8、设置go get的代理

export GO111MODULE=on
export GOPROXY=https://goproxy.io

golang的很多模块在https://golang.org/x下,国内是无法访问的,GoogleGitHub上也创建了对应的仓库, 奈何这些模块太多了,我们总不能一个一个去替换吧,我们也不知道它会用哪些模块,所以用代理服务器解决。https://goproxy.iohttps://golang.org/x的代理,它的服务器在中国香港, 我们可以访问,速度也是相当的快。

step9、继续下载剩余的子模块的代码

git submodule update --init --recursive

step10、编译、安装YouCompleteMe

YouCompleteMe的代码需要编译安装,安装的方式是使用如下的命令:

python install.py [option]...

注意:这里特别容易出现问题,您要确保做好两件事情:

1、您要确定您的系统中python命令的版本是2.x还是3.x,建议您使用3.x的最新版本。 使用如下方法确认:

python -V

2、您要记录下您要执行install.pypython命令的路径,使用如下方法可以知道:

command -v python

控制开启哪个语言option

option支持的语言利用的技术依赖
--clang-completerClanglibclangClang
--clangd-completerclang-tools-extra
clangd
clang-tools-extra
--cs-completerC#Mono RuntimeMono Runtime
--rust-completerRustRustToolChainsRustToolChains
--go-completergolangGoToolchainGoToolchain
--js-completerJavaScriptTernnode.jsnpm
--ts-completertsservernode.jsnpm
--java-completerJavaeclipse.jdt.lsJDK8
--all上面全部

其他option

option说明
--ninja使用ninja进行编译, 默认使用gmake进行编译。
--help查看使用帮助

示例:

python install.py --clang-completer --js-completer --ts-completer --java-completer --go-completer --ninja
提示:这里先加上--ninja参数尝试一下,如果出现错误了,我们再把此选项去掉。 因为ninja编译速度快,但是它比较新,稳定性和兼容性没有gmake好, 所以很可能会出现错误。

step11、修改~/.vimrc配置文件

1、在call plug#begin('~/.vim/bundle')call plug#end()之间的行中加入如下配置:

Plug 'git:https://gitee.com/mirrors/youcompleteme.git'

2、在文件最底行加入如下的配置:

let g:ycm_server_keep_logfiles                = 1
let g:ycm_server_log_level                    = 'debug'
let g:ycm_cache_omnifunc                      = 1
let g:ycm_server_python_interpreter           = '/usr/local/bin/python3'
let g:ycm_global_ycm_extra_conf               = '~/.ycm_extra_conf.py'
let g:ycm_collect_identifiers_from_tags_files = 1    " 开启 YCM 标签补全引擎
let g:ycm_min_num_of_chars_for_completion     = 1    " 从第一个键入字符就开始罗列匹配项
let g:ycm_seed_identifiers_with_syntax        = 1    " 语法关键字补全
let g:ycm_goto_buffer_command                 = 'horizontal-split' " 跳转打开上下分屏
let g:ycm_key_invoke_completion               = '<C-\>'
let g:ycm_semantic_triggers                   = {
                        \'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
                        \'cs,lua,javascript,html,css': ['re!\w{2}']
                        \}
let g:syntastic_java_checkers = []
map <F2> :YcmCompleter GoToDefinition<CR>
map <F3> :YcmCompleter GoToDeclaration<CR>
map <F4> :YcmCompleter GoToDefinitionElseDeclaration<CR>

大致意思就是通过Ctrl + \快捷键触发自动补全,另外输入2个字符之后也会触发自动补全。

注意:let g:ycm_server_python_interpreter = '/usr/local/bin/python3'配置的python命令的路径,必须是您执行install.py的那个python命令的路径。

step12、保存~/.vimrc

Vim底行模式下执行如下命令:

w

step13、使~/.vimrc的配置在当前环境中生效

Vim底行模式下执行如下命令:

source %

step14、安装插件

Vim底行模式下执行如下命令:

PlugInstall
1.3、查看YouCompleteMe帮助文档

Vim底行模式下执行如下命令:

help youcompleteme
1.4、YouCompleteMe的架构

YouCompleteMe采用了C/S架构。

打开Vim的时候,就会启动YouCompleteMeServerClient

ServerClient之间的通信通过HTTP协议。

1.5、.ycm_extra_conf.py

.ycm_extra_conf.pyYouCompleteMe Client的配置文件。

YouCompleteMe Client启动后,会从当前路径开始向上层路径寻找.ycm_extra_conf.py,找到后,会询问你要不要加载它, 如果没有找到,就加载~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py

~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py是全局配置,我们一般不做修改。

一般,我们会复制一个到${HOME}目录或者到自己的项目目录下,然后在此基础上做适合自己的修改。

~/.vim/bundle/YouCompleteMe目录及其子目录下有很多的.ycm_extra_conf.py样例。你可以根据自己的需要复制。

cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py ~
1.6、使用YouCompleteMe