加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

YCM的使用

发布时间:2020-12-15 23:11:09 所属栏目:安全 来源:网络整理
导读:YCM大概用来做3件事: (1)自动补全 (2)检查语法 (3)跳转到函数定义 然后涉及到两个关键的文件.vimrc 和 .ycm_extra_conf.py? ? 首先需要正确的配置,在.vimrc中写入, " YouCompleteMe " Python Semantic Completion let g:ycm_python_binary_path =

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,/usr/include/x86_64-linux-gnu,-isystem
/usr/include/c++/5,/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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读