YCM的使用
Posted yangxinrui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YCM的使用相关的知识,希望对你有一定的参考价值。
YCM大概用来做3件事:
(1)自动补全
(2)检查语法
(3)跳转到函数定义
然后涉及到两个关键的文件.vimrc 和 .ycm_extra_conf.py
首先需要正确的配置,在.vimrc中写入,
" YouCompleteMe " Python Semantic Completion let g:ycm_python_binary_path = ‘/usr/bin/python3‘ " C family Completion Path let g:ycm_global_ycm_extra_conf=‘~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py‘ " 跳转快捷键 nnoremap <c-k> :YcmCompleter GoToDeclaration<CR>| nnoremap <c-h> :YcmCompleter GoToDefinition<CR>| nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>| " 停止提示是否载入本地ycm_extra_conf文件 let g:ycm_confirm_extra_conf = 0 " 语法关键字补全 let g:ycm_seed_identifiers_with_syntax = 1 " 开启 YCM 基于标签引擎 let g:ycm_collect_identifiers_from_tags_files = 1 " 从第2个键入字符就开始罗列匹配项 let g:ycm_min_num_of_chars_for_completion=2 " 在注释输入中也能补全 let g:ycm_complete_in_comments = 1 " 在字符串输入中也能补全 let g:ycm_complete_in_strings = 1 " 注释和字符串中的文字也会被收入补全 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 弹出列表时选择第1项的快捷键(默认为<TAB>和<Down>) let g:ycm_key_list_select_completion = [‘<C-n>‘, ‘<Down>‘] " 弹出列表时选择前1项的快捷键(默认为<S-TAB>和<UP>) let g:ycm_key_list_previous_completion = [‘<C-p>‘, ‘<Up>‘] " 主动补全, 默认为<C-Space> "let g:ycm_key_invoke_completion = [‘<C-Space>‘] " 停止显示补全列表(防止列表影响视野), 可以按<C-Space>重新弹出 "let g:ycm_key_list_stop_completion = [‘<C-y>‘] let g:ycm_semantic_triggers = { ‘c,cpp,python,java,go,erlang,perl‘:[‘re!w{2}‘], ‘cs,lua,javascript‘:[‘re!w{2}‘], } "ycm默认需要按ctrl + space 来进行补全,可以在上面的花括号里面加入下面两行代码来直接进行补全[不需要按键] let g:ycm_add_preview_to_completeopt = 0 "关闭函数原型提示
.ycm_extra_conf.py 如下:
flags = [ ‘-Wall‘, ‘-Wextra‘, ‘-Werror‘, ‘-Wno-long-long‘, ‘-Wno-variadic-macros‘, ‘-fexceptions‘, ‘-DNDEBUG‘, ‘-std=c99‘, ‘-x‘, ‘c‘, ‘-I‘, ‘/usr/include‘, ‘-isystem‘, ‘/usr/lib/gcc/x86_64-linux-gnu/5/include‘, ‘-isystem‘, ‘/usr/include/x86_64-linux-gnu‘, ‘-isystem‘ ‘/usr/include/c++/5‘, ‘-isystem‘, ‘/usr/include/c++/5/bits‘ ] def FlagsForFile(filename): return {‘flags‘: flags}
YCM的实现了部分编译器和预编译器的功能,使用.ycm_extra_conf.py 文件来设置这些功能,
flags是个数组,可以发现里面有 各种选项和路径。
预编译时,头文件目录指定方法有三种:标准系统目录,-I指定目录,-isystem指定路面,查找顺序是: -I > -isystem > 标准系统目录,
由此可以知道,我们需要指定目录时,只需要这样写:
‘-isystem’ ‘dir‘,
我们可以将上面的代码添加到 YCM全局目录,但是这回让YCM全局目录变得臃肿,
又由于vim启动时加载的YCM配置文件的查找顺序是当前目录>上层目录>...>根目录>YCM全局目录,
所以只需要将YCM全局目录拷贝到工程根目录,再进行添加。
下面以我的一个项目为例:
首先我配置好了 .vimrc 和 YCM全局目录的.ycm_extra_conf.py
然后将YCM全局目录的.ycm_extra_conf.py拷到源文件目录下
修改.ycm_extra_conf.py 添加进工程的头文件目录,
在当前目录(就是包含.ycm_extra_conf.py的目录)进入vim,YCM的功能正常!
-------------------------------------------------------------------------------------------------------------
今天终于把vim打造成了IDE,开心~
留个影,纪念纪念,哈哈
参考博客:
https://www.jianshu.com/p/5aaae8f036c1
https://www.2cto.com/kf/201805/742061.html
https://blog.csdn.net/nia305/article/details/79954974