vim 8 IDE 开发环境配置

1、升级 vim 到最新版本 :vim8.2.2028

wget -O vim8.2.2028.zip https://github.com/vim/vim/archive/v8.2.2028.zip

unzip vim8.2.2028.zip

cd vim-8.2.2028/

cd src/

mkdir  /usr/local/vim8

编译vim,支持 python3

./configure --with-features=huge --enable-multibyte --enable-cscope --enable-python3interp=yes --with-python-config-dir=/usr/lib64/python3.6/config-3.6m-x86_64-linux-gnu --prefix=/usr/local/vim8/ --with-python3-command=/usr/bin/python3

cp  bin/vim  /usr/bin/vim

cp  bin/vim  /usr/local/bin/vim

2、安装 cmake

wget https://github.com/Kitware/CMake/releases/download/v3.19.0/cmake-3.19.0-Linux-x86_64.tar.gz

最新版不需要编译,直接可以使用

mv cmake-3.19.0-Linux-x86_64 /usr/local/cmake

echo 'export PATH=/usr/local/cmake/bin:$PATH' >>  .zshrc

source ~/.zshrc

3、安装vimplus

git clone https://github.com/chxuan/vimplus.git

cd ./vimplus

./install.sh

4、配置 .vimrc

"===========================================================
call plug#begin()

" 目录结构展示插件
Plug 'scrooloose/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'

" 代码自动补全
Plug 'ycm-core/YouCompleteMe'

" 括号自动补全
Plug 'jiangmiao/auto-pairs'

Plug 'itchyny/lightline.vim'

" 所有的插件必需在这一行之前添加
call plug#end() "required

" NERDTree --------------------------------------------------------------
" vim 启动的时候默认开启 NERDTree
autocmd VimEnter * NERDTree

" 默认光标在右侧文件编辑区
wincmd w
autocmd VimEnter * wincmd w

" 文件树设置 {{{
" NERDTree开关
map   :NERDTreeToggle

"当NERDTree为剩下的唯一窗口时自动关闭
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

" 修改树的显示图标
let g:NERDTreeDirArrowExpandable = '►'
let g:NERDTreeDirArrowCollapsible = '▼'
let NERDTreeAutoCenter=1

" 指定鼠标模式(1.双击打开;2.单目录双文件;3.单击打开)
let NERDTreeMouseMode=2

" 按下 F2 调出/隐藏 NERDTree
map :silent! NERDTreeToggle

" 将 NERDTree 的窗口设置在 vim 窗口的右侧(默认为左侧)
let NERDTreeWinPos="right"

" 显示行号
let NERDTreeShowLineNumbers=1

" 是否显示隐藏文件
let NERDTreeShowHidden=1

" 设置宽度
let NERDTreeWinSize=25

" 在终端启动vim时,共享NERDTree
let g:nerdtree_tabs_open_on_console_startup=1

" 忽略以下文件的显示
let NERDTreeIgnore=['\.pyc','\~$','\.swp']
"let g:NERDTreeIndicatorMapCustom = {
let g:NERDTreeGitStatusIndicatorMapCustom = {
    \"Modified"  :"✹",
    \"Staged"    :"✚",
    \"Untracked" :"✭",
    \"Renamed"   :"➜",
    \"Unmerged"  :"═",
    \"Deleted"   :"✖",
    \"Dirty"     :"✗",
    \"Clean"     :"✔︎",
    \ 'Ignored'   : '☒',
    \"Unknown"   :"?"
    \ }
" }}}

" ycm --------------------------------------------------------------
" C family Completion Path
let g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py'

" 打开vim时不再询问是否加载ycm_extra_conf.py
let g:ycm_confirm_extra_conf=0
" Python Semantic Completion
let g:ycm_python_binary_path = 'python3'
let g:ycm_autoclose_preview_window_after_completion = 1
" 在注释输入中也能补全
let g:ycm_complete_in_comments = 1  
" 在字符串输入中也能补全
let g:ycm_complete_in_strings = 1   
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1  

let g:syntastic_cpp_compiler = 'g++'
let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libc++'

" 语言关键字补全, 不过python关键字都很短,所以,需要的自己打开 
let g:ycm_seed_identifiers_with_syntax=1
let g:ycm_collect_identifiers_from_tags_files = 1
" 从第2个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=2       
              
"mapping
nmap gd :YcmDiags
" 跳转到申明处
nnoremap gl :YcmCompleter GoToDeclaration   
" 跳转到定义处       
nnoremap gf :YcmCompleter GoToDefinition            
nnoremap gg :YcmCompleter GoToDefinitionElseDeclaration
" 对指定源文件,输入两个字母后即触发语义补全
let g:ycm_semantic_triggers =  {
           \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
           \ 'cs,lua,javascript': ['re!\w{2}'],
           \ }

let g:ycm_filetype_whitelist = { 
            \"c":1,
            \"cpp":1, 
            \"go":1,
            \"python":1,
            \"sh":1,
            \"zsh":1,
            \ }
" 黑名单,不启用
let g:ycm_filetype_blacklist = {
          \ 'tagbar' : 1,
          \ 'gitcommit' : 1,
          \ }
"===========================================================
set autoindent            " Indent according to previous line.
set expandtab             " Use spaces instead of tabs.
set softtabstop =4        " Tab key indents by 4 spaces.
set shiftwidth  =4        " >> indents by 4 spaces.
set shiftround            " >> indents to next multiple of 'shiftwidth'.

set hidden                " Switch between buffers without having to save first.
set display     =lastline " Show as much as possible of the last line.

set ttyfast               " Faster redrawing.
set lazyredraw            " Only redraw when necessary.

set splitbelow            " Open new windows below the current window.
set splitright            " Open new windows right of the current window.

set cursorline            " Find the current line quickly.
set wrapscan              " Searches wrap around end-of-file.
set report      =0        " Always report changed lines.
set synmaxcol   =120      " Only highlight the first 200 columns.
set number

set list                  " Show non-printable characters.
if has('multi_byte') && &encoding ==# 'utf-8'
  let &listchars = 'tab:▸ ,extends:❯,precedes:❮,nbsp:±'
else
  let &listchars = 'tab:> ,extends:>,precedes:<,nbsp:.'
endif

" Put all temporary files under the same directory.
let s:vim_backup = expand("$HOME/.vim/files/backup/")
if !isdirectory(s:vim_backup)
   silent! call mkdir(s:vim_backup, 'p')
endif
let s:vim_swap = expand("$HOME/.vim/files/swap/")
if !isdirectory(s:vim_swap)
   silent! call mkdir(s:vim_swap, 'p')
endif
let s:vim_undo = expand("$HOME/.vim/files/undo/")
if !isdirectory(s:vim_undo)
   silent! call mkdir(s:vim_undo, 'p')
endif
let s:vim_info = expand("$HOME/.vim/files/info/")
if !isdirectory(s:vim_info)
   silent! call mkdir(s:vim_info, 'p')
endif
set backup
set backupdir   =$HOME/.vim/files/backup/
set backupext   =-vimbackup
set backupskip  =
set directory   =$HOME/.vim/files/swap/
set updatecount =100
set undofile
set undodir     =$HOME/.vim/files/undo/
set viminfo     ='100,n$HOME/.vim/files/info/viminfo

" 取消换行
set nowrap 
" 为方便复制,用开启/关闭行号显示
nnoremap  :set nonumber!:set foldcolumn=0

5、安装YouCompleteMe

vimplus自动安装好之后 YouCompleteMe在系统的 ~/.vim/plugged/YouCompleteMe 路径下
先删除之前装的YouCompleteMe目录:

rm -rf ~/.vim/plugged/YouCompleteMe

从git上拉取YouCompleteMe

git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/plugged/YouCompleteMe #很慢
cd ~/.vim/plugged/YouCompleteMe
git submodule update --init --recursive  #很慢

等待下载完毕,执行安装命令

./install.py --clang-completer