vim安装 YCM 过程记录

Posted kimalittlestar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim安装 YCM 过程记录相关的知识,希望对你有一定的参考价值。

YCM(YouComplateMe) 属于Vim中大神级的插件,提供了类似于巨硬爸爸的VS中的代码补全,但是其安装方式也是比较复杂,因此特意写下一篇记录,记录下我自己如何安装这一插件的过程;
  1. 检查自己的vim版本是否在7.9版本之上、是否支持Pthon很幸运我的vim版本是8.0 
       
 vim --version    #查看vim版本以及是否支持Python 支持的话会在前方出现一个‘+’字符

 

  2.  安装各类可能需要的环境
 

编译 YouCompleteMe 插件时需要依赖 cmake 构建 Makefile,且依赖 Python 源码头文件,Ubuntu 系统可以使用以下命令安装相关依赖。

       
 sudo apt-get install build-essential cmake python-dev python3-dev

 

 
  1. 安装git 和 Vundle
   sudo apt-get install git

 

vim官方推荐一个插件“vundle”用于管理vim的其他插件,这个插件的安装使用git 克隆到自己的本地文件夹,后面这个Vundle.vim就是vim的插件文件。*此路径  :~/.vim/bundle/Vundle.vim 是vim的插件默认路径
   
     git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

 

 
  1. 下载YouComplateMe源码 等待编译
       
 git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe

 

 
  1. 下载YouComplateMe可能需要的安装环境
下载需要的安装环境需要跳转到YouComplateMe所在目录
 
        cd ~/.vim/bundle/YouCompleteMe
        git submodule update --init --recursive
 

 

  1. 编译YCM(YouComplateMe)
在YCM所在目录下执行
      
  ./install.py --clang-completer

 

期间如果出现错误,参考:https://www.cnblogs.com/dakewei/p/10491373.html 解决错误;
 
  1. 如果出现 AttributeError: ‘module‘ object has no attribute ‘FlagsForFile‘ 错误;

    需要添加一个配置文件,在这里添加一个 C family 类型文件模板

import os import ycm_core flags = [
    -Wall,   
    -Wextra,   
    -Werror,  
    -Wno-long-long,  
    -Wno-variadic-macros,  
    -fexceptions,   
    -ferror-limit=10000,   
    -DNDEBUG,  
    -std=c99,   
    -xc,   
    -isystem/usr/include/,   
    ] 
SOURCE_EXTENSIONS = [ 
                         .cpp, 
                         .cxx, 
                         .cc, 
                         .c, 
                         ] 
def FlagsForFile( filename, **kwargs ):   
    return 
        flags: flags,   
        do_cache: True   
    

 

  1. 将以上代码写入到这个文件
    ~/.ycm_c-c++_conf.py

 

 
  1. 打开 .vimrc 配置文件 加入如下语句:
    let g:ycm_global_ycm_extra_conf = "~/.ycm_c-c++_conf.py"

 

 
 
  1. 安装 NERDTree 插件显示当前目录下的目录树
    cd ~/.vim/bundle
    git clone https://github.com/scrooloose/nerdtree.git

 

  1. 在.vimrc文件Vundle管理中添加插件
Plugin scrooloose/nerdtree

 

  1. 添加相对应 NERDTree的自定义设置,例如默认开启
"--------------NERD TREE SETTING---------------
"自动启动文件树
autocmd vimenter * NERDTree
"设置快捷按键打开关闭文件树                                                                                       
map <C-t> :NERDTreeToggle<CR>                                                                                     
"关闭vim时,如果打开的文件除了NERDTree没有其他文件时,它自动关闭,减少多次按:q!
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType")&&b:NERDTreeType == "primary") | q | endif

  

最后把自己配置的.vimrc 文件po出来供大家使用
  1 set nocompatible              " 去除VI一致性,必须要添加
  2 filetype off                  " 必须要添加
  3 
  4 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  5 
  6 " 显示相关 
  7 
  8 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  9 
 10 "set shortmess=atI  " 启动的时候不显示那个援助乌干达儿童的提示 
 11 
 12 "winpos 5 5          " 设定窗口位置 
 13 
 14 "set lines=40 columns=155    " 设定窗口大小 
 15 
 16 set nu              " 显示行号 
 17 
 18 set go=            " 不要图形按钮 
 19 
 20 "color asmanian2    " 设置背景主题 
 21 
 22 set guifont=Consolas:h10:cANSI  " 设置字体 
 23 
 24 "syntax on          " 语法高亮 
 25 
 26 autocmd InsertLeave * se nocul  " 用浅色高亮当前行 
 27 
 28 autocmd InsertEnter * se cul    " 用浅色高亮当前行 
 29 
 30 "set ruler          " 显示标尺 
 31 
 32 set showcmd        " 输入的命令显示出来,看的清楚些 
 33 
 34 "set cmdheight=1    " 命令行(在状态行下)的高度,设置为1 
 35 
 36 "set whichwrap+=<,>,h,l  " 允许backspace和光标键跨越行边界(不建议) 
 37 
 38 set scrolloff=3    " 光标移动到buffer的顶部和底部时保持3行距离 
 39 
 40 set novisualbell    " 不要闪烁(不明白) 
 41 
 42 set statusline=%F%m%r%h%w\\ [FORMAT=%&ff]\\ [TYPE=%Y]\\ [POS=%l,%v][%p%%]\\ %strftime(\\"%d/%m/%y\\ -\\ %H:%M\\")  "状态行显示的内容 
 43 
 44 set laststatus=1    " 启动显示状态行(1),总是显示状态行(2) 
 45 
 46 set foldenable      " 允许折叠 
 47 
 48 set foldmethod=manual  " 手动折叠 
 49 
 50 "set background=dark "背景使用黑色
 51 
 52 set nocompatible  "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 
 53 
 54 " 显示中文帮助
 55 
 56 if version >= 603
 57 
 58     set helplang=cn
 59 
 60     set encoding=utf-8
 61 
 62 endif
 63 
 64 " 设置配色方案
 65 
 66 "colorscheme murphy
 67 
 68 "字体
 69 
 70 "if (has("gui_running"))
 71 
 72 "  set guifont=Bitstream\\ Vera\\ Sans\\ Mono\\ 10
 73 
 74 "endif
 75 
 76  
 77 
 78 set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
 79 
 80 set termencoding=utf-8
 81 
 82 set encoding=utf-8
 83 
 84 set fileencodings=ucs-bom,utf-8,cp936
 85 
 86 set fileencoding=utf-8
 87 
 88 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 89 
 90 """""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 91 
 92 "新建.c,.h,.sh,.java文件,自动插入文件头
 93 
 94 autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
 95 
 96 ""定义函数SetTitle,自动插入文件头
 97 
 98 func SetTitle()
 99 
100     "如果文件类型为.sh文件
101 
102     if &filetype == sh
103 
104         call setline(1,"\\#########################################################################")
105 
106         call append(line("."), "\\# File Name: ".expand("%"))
107 
108         call append(line(".")+1, "\\# Author: kimalittlestar")
109 
110         call append(line(".")+2, "\\# mail: kimalittlestar@gmail.com")
111 
112         call append(line(".")+3, "\\# Created Time: ".strftime("%c"))
113 
114         call append(line(".")+4, "\\#########################################################################")
115 
116         call append(line(".")+5, "\\#!/bin/bash")
117 
118         call append(line(".")+6, "")
119 
120     else
121 
122         call setline(1, "/*************************************************************************")
123 
124         call append(line("."), "    > File Name: ".expand("%"))
125 
126         call append(line(".")+1, "    > Author: kimalittlestar")
127 
128         call append(line(".")+2, "    > Mail: kimalittlestar@gmail.com ")
129 
130         call append(line(".")+3, "    > Created Time: ".strftime("%c"))
131 
132         call append(line(".")+4, " ************************************************************************/")
133 
134         call append(line(".")+5, "")
135 
136     endif
137 
138 "  if &filetype == ‘cpp‘
139 
140 "
141 
142 "      call append(line(".")+6, "#include<iostream>")
143 
144 "
145 
146 "      call append(line(".")+7, "using namespace std;")
147 
148 "
149 
150 "      call append(line(".")+8, "")
151 
152 "
153 
154 "  endif
155 
156 "
157 
158 "  if &filetype == ‘c‘
159 
160 "
161 
162 "      call append(line(".")+6, "#include<stdio.h>")
163 
164 "
165 
166 "      call append(line(".")+7, "")
167 
168 "
169 
170 "  endif
171 
172     "新建文件后,自动定位到文件末尾
173 
174     autocmd BufNewFile * normal G
175 
176 endfunc
177 
178 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
179 
180 "键盘命令
181 
182 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
183 
184 nmap <leader>w :w!<cr>
185 
186 nmap <leader>f :find<cr>
187 
188 " 映射全选+复制 ctrl+a
189 
190 map <C-A> ggVGY
191 
192 map! <C-A> <Esc>ggVGY
193 
194 map <F12> gg=G
195 
196 " 选中状态下 Ctrl+c 复制
197 
198 vmap <C-c> "+y
199 
200 "去空行 
201 
202 nnoremap <F2> :g/^\\s*$/d<CR>
203 
204 "比较文件 
205 
206 nnoremap <C-F2> :vert diffsplit
207 
208 "新建标签 
209 
210 map <M-F2> :tabnew<CR> 
211 
212 "列出当前目录文件 
213 
214 map <F3> :tabnew .<CR> 
215 
216 "打开树状文件目录 
217 
218 map <C-f> \\be 
219 
220 "C,C++ 按F5编译运行
221 
222 map <F5> :call CompileRunGcc()<CR>
223 
224 func! CompileRunGcc()
225 
226     exec "w"
227 
228     if &filetype == c
229 
230         exec "!g++ % -o %<"
231 
232         exec "! ./%<"
233 
234     elseif &filetype == cpp
235 
236         exec "!g++ % -o %<"
237 
238         exec "! ./%<"
239 
240     elseif &filetype == java
241 
242         exec "!javac %"
243 
244         exec "!java %<"
245 
246     elseif &filetype == sh
247 
248         :!./%
249 
250     endif
251 
252 endfunc
253 
254 "C,C++的调试
255 
256 map <F8> :call Rungdb()<CR>
257 
258 func! Rungdb()
259 
260     exec "w"
261 
262     exec "!g++ % -g -o %<"
263 
264     exec "!gdb ./%<"
265 
266 endfunc
267 
268 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
269 
270 ""实用设置
271 
272 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
273 
274 " 设置当文件被改动时自动载入
275 
276 set autoread
277 
278 " quickfix模式
279 
280 autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
281 
282 "代码补全
283 
284 set completeopt=preview,menu
285 
286 "允许插件 
287 
288 filetype plugin on
289 
290 "共享剪贴板 
291 
292 set clipboard+=unnamed
293 
294 "从不备份 
295 
296 set nobackup
297 
298 "make 运行
299 
300 :set makeprg=g++\\ -Wall\\ \\ %
301 
302 "自动保存
303 
304 set autowrite
305 
306 set ruler                  " 打开状态栏标尺
307 
308 set cursorline              " 突出显示当前行
309 
310 set magic                  " 设置魔术
311 
312 set guioptions-=T          " 隐藏工具栏
313 
314 set guioptions-=m          " 隐藏菜单栏
315 
316 "set statusline=\\ %<%F[%1*%M%*%n%R%H]%=\\ %y\\ %0(%&fileformat\\ %&encoding\\ %c:%l/%L%)\\
317 
318 " 设置在状态行显示的信息
319 
320 set foldcolumn=0
321 
322 set foldmethod=indent
323 
324 set foldlevel=3
325 
326 set foldenable              " 开始折叠
327 
328 " 不要使用vi的键盘模式,而是vim自己的
329 
330 set nocompatible
331 
332 " 语法高亮
333 
334 set syntax=on
335 
336 " 去掉输入错误的提示声音
337 
338 set noeb
339 
340 " 在处理未保存或只读文件的时候,弹出确认
341 
342 set confirm
343 
344 " 自动缩进
345 
346 set autoindent
347 
348 set cindent
349 
350 " Tab键的宽度
351 
352 set tabstop=4
353 
354 " 统一缩进为4
355 
356 set softtabstop=4
357 
358 set shiftwidth=4
359 
360 " 不要用空格代替制表符
361 
362 set noexpandtab
363 
364 " 在行和段开始处使用制表符
365 
366 set smarttab
367 
368 " 显示行号
369 
370 set number
371 
372 " 历史记录数
373 
374 set history=1000
375 
376 "禁止生成临时文件
377 
378 set nobackup
379 
380 set noswapfile
381 
382 "搜索忽略大小写
383 
384 set ignorecase
385 
386 "搜索逐字符高亮
387 
388 set hlsearch
389 
390 set incsearch
391 
392 "行内替换
393 
394 set gdefault
395 
396 "编码设置
397 
398 set enc=utf-8
399 
400 set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
401 
402 "语言设置
403 
404 set langmenu=zh_CN.UTF-8
405 
406 set helplang=cn
407 
408 " 我的状态行显示的内容(包括文件类型和解码)
409 
410 "set statusline=%F%m%r%h%w\\ [FORMAT=%&ff]\\ [TYPE=%Y]\\ [POS=%l,%v][%p%%]\\ %strftime(\\"%d/%m/%y\\ -\\ %H:%M\\")
411 
412 "set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]
413 
414 " 总是显示状态行
415 
416 set laststatus=2
417 
418 " 命令行(在状态行下)的高度,默认为1,这里是2
419 
420 set cmdheight=2
421 
422 " 侦测文件类型
423 
424 filetype on
425 
426 " 载入文件类型插件
427 
428 filetype plugin on
429 
430 " 为特定文件类型载入相关缩进文件
431 
432 filetype indent on
433 
434 " 保存全局变量
435 
436 set viminfo+=!
437 
438 " 带有如下符号的单词不要被换行分割
439 
440 set iskeyword+=_,$,@,%,#,-
441 
442 " 字符间插入的像素行数目
443 
444 set linespace=0
445 
446 " 增强模式中的命令行自动完成操作
447 
448 set wildmenu
449 
450 " 使回格键(backspace)正常处理indent, eol, start等
451 
452 set backspace=2
453 
454 " 允许backspace和光标键跨越行边界
455 
456 set whichwrap+=<,>,h,l
457 
458 " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
459 
460 set mouse=a
461 
462 set selection=exclusive
463 
464 set selectmode=mouse,key
465 
466 " 通过使用: commands命令,告诉我们文件的哪一行被改变过
467 
468 set report=0
469 
470 " 在被分割的窗口间显示空白,便于阅读
471 
472 set fillchars=vert:\\ ,stl:\\ ,stlnc:473 
474 " 高亮显示匹配的括号
475 
476 set showmatch
477 
478 " 匹配括号高亮的时间(单位是十分之一秒)
479 
480 set matchtime=1
481 
482 " 光标移动到buffer的顶部和底部时保持3行距离
483 
484 set scrolloff=3
485 
486 " 为C程序提供自动缩进
487 
488 set smartindent
489 
490 " 高亮显示普通txt文件(需要txt.vim脚本)
491 
492 au BufRead,BufNewFile *  setfiletype txt
493 
494 "自动补全
495 
496 :inoremap ( ()<ESC>i
497 
498 :inoremap ) <c-r>=ClosePair())<CR>
499 
500 :inoremap  <CR><ESC>O
501 
502 :inoremap  <c-r>=ClosePair()<CR>
503 
504 :inoremap [ []<ESC>i
505 
506 :inoremap ] <c-r>=ClosePair(])<CR>
507 
508 :inoremap " ""<ESC>i
509 
510 :inoremap  ‘‘<ESC>i
511 
512 function! ClosePair(char)
513 
514     if getline(.)[col(.) - 1] == a:char
515 
516         return "\\<Right>"
517 
518     else
519 
520         return a:char
521 
522     endif
523 
524 endfunction
525 
526 filetype plugin indent on
527 
528 "打开文件类型检测, 加了这句才可以用智能补全
529 
530 set completeopt=longest,menu
531 
532 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
533 
534 " CTags的设定 
535 
536 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
537 
538 let Tlist_Sort_Type = "name"    " 按照名称排序 
539 
540 let Tlist_Use_Right_Window = 1  " 在右侧显示窗口 
541 
542 let Tlist_Compart_Format = 1    " 压缩方式 
543 
544 let Tlist_Exist_OnlyWindow = 1  " 如果只有一个buffer,kill窗口也kill掉buffer 
545 
546 let Tlist_File_Fold_Auto_Close = 0  " 不要关闭其他文件的tags 
547 
548 let Tlist_Enable_Fold_Column = 0    " 不要显示折叠树 
549 
550 autocmd FileType java set tags+=D:\\tools\\java\\tags 
551 
552 "autocmd FileType h,cpp,cc,c set tags+=D:\\tools\\cpp\\tags 
553 
554 "let Tlist_Show_One_File=1            "不同时显示多个文件的tag,只显示当前文件的
555 
556 "设置tags 
557 
558 set tags=tags 
559 
560 "set autochdir
561 
562 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
563 
564 "其他东东
565 
566 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
567 
568 "默认打开Taglist
569 
570 let Tlist_Auto_Open=1
571 
572 """"""""""""""""""""""""""""""
573 
574 " Tag list (ctags)
575 
576 """"""""""""""""""""""""""""""""
577 
578 let Tlist_Ctags_Cmd = /usr/bin/ctags
579 
580 let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
581 
582 let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
583 
584 let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
585 
586 " minibufexpl插件的一般设置
587 
588 let g:miniBufExplMapWindowNavVim = 1
589 
590 let g:miniBufExplMapWindowNavArrows = 1
591 
592 let g:miniBufExplMapCTabSwitchBufs = 1
593 
594 let g:miniBufExplModSelTarget = 1
595 
596 "----------------设置包括vundle和初始化相关的runtime path----------------------
597 
598 set rtp+=~/.vim/bundle/Vundle.vim
599 
600 call vundle#begin()
601 
602 " 另一种选择, 指定一个vundle安装插件的路径
603 
604 "call vundle#begin(‘~/some/path/here‘)
605 
606 " 让vundle管理插件版本,必须
607 
608 Plugin VundleVim/Vundle.vim
609 
610 Plugin Valloric/YouCompleteMe
611 
612 Plugin scrooloose/nerdtree
613 
614 " " 以下范例用来支持不同格式的插件安装.
615 
616 " " 请将安装插件的命令放在vundle#begin和vundle#end之间.
617 
618 " " Github上的插件
619 
620 " " 格式为 Plugin 用户名/插件仓库名
621 
622 " Plugin ‘tpope/vim-fugitive‘
623 
624 " " 来自 http://vim-scripts.org/vim/scripts.html 的插件
625 
626 " " Plugin 插件名称 实际上是 Plugin vim-scripts/插件仓库名
627 
628 " 只是此处的用户名可以省略
629 
630 " Plugin ‘L9‘
631 
632 " " 由Git支持但不再github上的插件仓库 Plugin git clone 后面的地址
633 
634 " Plugin ‘git://git.wincent.com/command-t.git‘
635 
636 " " 本地的Git仓库(例如自己的插件) Plugin file:///+本地插件仓库绝对路径
637 
638 " Plugin ‘file:///home/gmarik/path/to/plugin‘
639 
640 " " 插件在仓库的子目录中.
641 
642 " " 正确指定路径用以设置runtimepath. 以下范例插件在sparkup/vim目录下
643 
644 " Plugin ‘rstacruz/sparkup‘, ‘rtp‘: ‘vim/‘
645 
646 " " 安装L9,如果已经安装过这个插件,可利用以下格式避免命名冲突
647 
648 " Plugin ‘ascenator/L9‘, ‘name‘: ‘newL9‘
649 
650 " 你的所有插件需要在下面这行之前
651 
652 call vundle#end()            " 必须
653 
654 filetype plugin indent on    " 必须
655 
656 " 加载vim自带和插件相应的语法和文件类型相关脚本
657 
658 " 忽视插件改变缩进,可以使用以下替代:
659 
660 "filetype plugin on
661 
662 "
663 
664 " 常用的命令
665 
666 " :PluginList      - 列出所有已配置的插件
667 
668 " :PluginInstall  - 安装插件,追加 `!` 用以更新或使用 :PluginUpdate
669 
670 " :PluginSearch foo - 搜索 foo ; 追加 `!` 清除本地缓存
671 
672 " :PluginClean      - 清除未使用插件,需要确认; 追加 `!`
673 
674 " 自动批准移除未使用插件
675 
676  
677 
678 "-----------------youcompleteme-----------------"
679 
680 "默认配置文件路径"
681 
682 let g:ycm_global_ycm_extra_conf = ~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py      "配置全局路径
683 
684 "log"
685 
686 let g:ycm_server_keep_logfiles=1
687 
688 let g:ycm_sever_log_level=debug
689 
690 "打开vim时不再询问是否加载ycm_extra_conf.py配置"
691 
692 "let g:ycm_confirm_extra_conf=0
693 
694 "set completeopt=longest,menu
695 
696 "python解释器路径"
697 
698 let g:ycm_path_to_python_interpreter=/usr/bin/python
699 
700 "let g:ycm_python_binary_path = ‘/home/wdh/anaconda3/bin/python3‘  "python 环境
701 
702 "是否开启语义补全"
703 
704 let g:ycm_seed_identifiers_with_syntax=1
705 
706 "是否在注释中也开启补全"
707 
708 let g:ycm_complete_in_comments=1
709 
710 let g:ycm_collect_identifiers_from_comments_and_strings = 0
711 
712 "开始补全的字符数"
713 
714 let g:ycm_min_num_of_chars_for_completion=2
715 
716 "补全后自动关机预览窗口"
717 
718 "let g:ycm_autoclose_preview_window_after_completion=1
719 
720 "禁止缓存匹配项,每次都重新生成匹配项"
721 
722 let g:ycm_cache_omnifunc=0
723 
724 "字符串中也开启补全"
725 
726 let g:ycm_complete_in_strings = 1
727 
728 let g:ycm_seed_identifiers_with_syntax=1 "补全关键字
729 
730 "离开插入模式后自动关闭预览窗口"
731 
732 autocmd InsertLeave * if pumvisible() == 0|pclose|endif
733 
734 "设置C 系列语言格式配置文件路径
735 
736 let g:ycm_global_ycm_extra_conf = "~/.vim/plugged/YouCompleteMe/.ycm_c-c++_conf.py"
737 
738 "按下2个字母后自动语意补全(检测上下文环境)
739 
740 let g:ycm_semantic_triggers =  
741 
742 \\ c,cpp,python,java,go,erlang,perl: [re!\\w2],
743 
744 \\ cs,lua,javascript: [re!\\w2],
745 
746 \\ 
747 
748 "设置提示高亮背景颜色
749 
750 highlight PMenu ctermfg=0 ctermbg=242 guifg=black guibg=darkgrey
751 
752 highlight PMenuSel ctermfg=242 ctermbg=8 guifg=darkgrey guibg=black
753 
754 "文件类型白名单,这些文件后缀会被解析
755 
756 let g:ycm_filetype_whitelist = 
757 
758 \\ "c":1,
759 
760 \\ "h":1,
761 
762 \\ "py":1,
763 
764 \\ "cpp":1,
765 
766 \\ "hpp":1,
767 
768 \\ "objc":1,
769 
770             \\ "sh":1,
771 
772 \\ "zsh":1,
773 
774 \\ "zimbu":1,
775 
776 \\ 
777 
778 "回车即选中当前项"
779 
780 " inoremap <expr> <CR>      pumvisible() ? ‘<C-y>‘ : ‘\\<CR>‘   
781 
782 "上下左右键行为"
783 
784 inoremap <expr> <Down>    pumvisible() ? \\<C-n> : \\<Down>
785 
786 inoremap <expr> <Up>      pumvisible() ? \\<C-p> : \\<Up>
787 
788 inoremap <expr> <PageDown> pumvisible() ? \\<PageDown>\\<C-p>\\<C-n> : \\<PageDown>
789 
790 inoremap <expr> <PageUp>  pumvisible() ? \\<PageUp>\\<C-p>\\<C-n> : \\<PageUp>791 
792 "--------------NERD TREE SETTING---------------
793 
794 "自动启动文件树
795 
796 autocmd vimenter * NERDTree
797 
798 "设置快捷按键打开关闭文件树
799 
800 map <C-t> :NERDTreeToggle<CR>
801 
802 "关闭vim时,如果打开的文件除了NERDTree没有其他文件时,它自动关闭,减少多次按:q!
803 
804 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType")&&b:NERDTreeType == "primary") | q | endif

 

 
贴图:

技术图片

 

以上是关于vim安装 YCM 过程记录的主要内容,如果未能解决你的问题,请参考以下文章

YouCompleteMe入坑指南

vim自动补全插件YouCompleteMe

安装vim的ycm

Ubuntu18.04安装Vim-plu与YCM

YCM 安装小记

vim-YCM插件安装