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!\w{2}'],
743 
744 \ 'cs,lua,javascript': ['re!\w{2}'],
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

 

 
貼圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM