YCM(YouComplateMe) 属于Vim中大神级的插件,提供了类似于巨硬爸爸的VS中的代码补全,但是其安装方式也是比较复杂,因此特意写下一篇记录,记录下我自己如何安装这一插件的过程;
- 检查自己的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
- 安装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
- 下载YouComplateMe源码 等待编译
git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe
- 下载YouComplateMe可能需要的安装环境
下载需要的安装环境需要跳转到YouComplateMe所在目录
cd ~/.vim/bundle/YouCompleteMe git submodule update --init --recursive
- 编译YCM(YouComplateMe)
在YCM所在目录下执行
./install.py --clang-completer
期间如果出现错误,参考:https://www.cnblogs.com/dakewei/p/10491373.html 解决错误;
- 如果出现 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 }
- 将以上代码写入到这个文件
~/.ycm_c-c++_conf.py
- 打开 .vimrc 配置文件 加入如下语句:
let g:ycm_global_ycm_extra_conf = "~/.ycm_c-c++_conf.py"
自由配置YCM配置 参考网址:http://zhiyi.live/2019/05/29/YouCompleteMe%E8%B8%A9%E5%9D%91%E8%AE%B0/
- 安装 NERDTree 插件显示当前目录下的目录树
cd ~/.vim/bundle git clone https://github.com/scrooloose/nerdtree.git
- 在.vimrc文件Vundle管理中添加插件
Plugin ‘scrooloose/nerdtree‘
- 添加相对应 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: [email protected]") 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: [email protected] ") 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
贴图:
原文地址:https://www.cnblogs.com/kimalittlestar/p/11557835.html
时间: 2024-10-07 23:39:21