操作系统

由于本人常在 vim 上写代码,故装 YCM 插件提高效率。实验环境

  1. ubuntu18.04 操作系统
  2. vundle 插件管理
  3. vim 8.0 编辑器
  4. cmake
  5. python-dev
  6. build-essential

vundle 配置

https://github.com/VundleVim/Vundle.vim

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

vim ~/.vimrc 然后复制以下信息

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
call vundle#end()
filetype plugin indent on

vim 后执行 :PluginInstall 完成

YCM 安装

https://github.com/Valloric/YouCompleteMe

vim ~/.vimrc 然后添加 YCM 插件进行安装

Plugin 'Valloric/YouCompleteMe'

sudo apt install build-essential cmake python-dev 安装必要软件

cd ~/.vim/bundle/YouCompleteMe

./install.py --clang-completer

等待安装完毕,时间有点长。

YCM 配置

在 .vimrc 中加上

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py'
let g:ycm_seed_identifiers_with_syntax=1

在 .ycm_extra_conf.py 中的 flags 加上

'-isystem',
'/usr/include/c++/7.3.0/',
'-isystem',
'/usr/include',

完成 C/C++ 头文件补全。

vim 个性定制

在 .vimrc 中定制一些操作和外观。

vim ~./vimrc

" 自动4格缩进,按照 C 语言风格来
set autoindent
set cindent
set shiftwidth=4
set softtabstop=4
set tabstop=4

" 以下是 vundle 配置,详情看官方文档

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'

Plugin 'Valloric/YouCompleteMe'

" 配置文件全局路径
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py'
" 字符串匹配
let g:ycm_seed_identifiers_with_syntax = 1
" 选中后关闭预览
let g:ycm_autoclose_preview_window_after_completion = 1
" 注释补全 
let g:ycm_complete_in_comments = 1
" 收录代码中的注释和代码
let g:ycm_collect_identifiers_from_comments_and_strings = 1
" 补全触发器
let g:ycm_semantic_triggers =  {
  \   'c' : ['->', '.','re![_a-zA-z0-9]'],
  \   'objc' : ['->', '.', 're!\[[_a-zA-Z]+\w*\s', 're!^\s*[^\W\d]\w*\s',
  \             're!\[.*\]\s'],
  \   'ocaml' : ['.', '#'],
  \   'cpp,objcpp' : ['->', '.', '::','re![_a-zA-Z0-9]'],
  \   'perl' : ['->'],
  \   'php' : ['->', '::'],
  \   'cs,java,javascript,typescript,d,python,perl6,scala,vb,elixir,go' : ['.'],
  \   'ruby' : ['.', '::'],
  \   'lua' : ['.', ':'],
  \   'erlang' : [':'],
  \ }


call vundle#end()
filetype plugin indent on