for short | : | YCM |
是什么 ? | : | a code-completion engine for Vim. |
开发语言 | : | VimL + C |
官方主页 | : | http://www.vim.org |
源码仓库 | : |
step1、安装依赖
下载时 | git |
编译时 | cmake、gmake | ninja、 ( gcc + g++ ) / GCC | Clang / LLVM、CPython ( bin 、dev ) |
运行时 | CPython ( bin 、lib ) |
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
就是安装YouCompleteMe
的Python
脚本,后面会用到。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
下,国内是无法访问的,Google
在GitHub上也创建了对应的仓库, 奈何这些模块太多了,我们总不能一个一个去替换吧,我们也不知道它会用哪些模块,所以用代理服务器解决。https://goproxy.io
是https://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.py
的python命令的路径,使用如下方法可以知道:
command -v python
控制开启哪个语言的option
:
option | 支持的语言 | 利用的技术 | 依赖 |
---|---|---|---|
--clang-completer | Clang(libclang ) | Clang | |
--clangd-completer | clang-tools-extra ( clangd ) | clang-tools-extra | |
--cs-completer | C# | Mono Runtime | Mono Runtime |
--rust-completer | Rust | RustToolChains | RustToolChains |
--go-completer | golang | GoToolchain | GoToolchain |
--js-completer | JavaScript | Tern | node.js、npm |
--ts-completer | tsserver | node.js、npm | |
--java-completer | Java | eclipse.jdt.ls | JDK8 |
--all | 上面全部 |
其他option
:
option | 说明 |
---|---|
--ninja | 使用ninja进行编译, 默认使用gmake进行编译。 |
--help | 查看使用帮助 |
示例:
python install.py --clang-completer --js-completer --ts-completer --java-completer --go-completer --ninja
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
w
step13、使~/.vimrc
的配置在当前环境中生效
source %
step14、安装插件
PlugInstall
help youcompleteme
YouCompleteMe
采用了C/S
架构。
打开Vim的时候,就会启动YouCompleteMe
的Server
和Client
。
Server
和Client
之间的通信通过HTTP协议。
.ycm_extra_conf.py
是YouCompleteMe 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 ~