Ubuntu 16.04配置安装YouComPleteMe等插件

1、手动编译安装vim

1、通过apt-get方式安装的vim可能会不支持某些特性,所以我们这里建议手动编译安装:
首先先移除已有的vim

$ sudo apt-get remove vim vim-runtime gvim

2、安装vim插件的依赖项

$ sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev \
    libgtk2.0-dev libatk1.0-dev libbonoboui2-dev \
    libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev \
    python3-dev ruby-dev lua5.1 liblua5.1-dev libperl-dev 

2、下载vim源码包

1.先下载vim源码包
$ sudo apt-get install git
$ git clone https://github.com/vim/vim.git

3、编译安装vim

1.解压并编译安装vim
$ cd vim-master
./configure --with-features=huge \
            --enable-multibyte \
            --enable-rubyinterp \
            --enable-pythoninterp \
            --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu \
            --enable-perlinterp \
            --enable-luainterp \
            --enable-gui=gtk2 --enable-cscope --prefix=/usr
$ sudo make VIMRUNTIMEDIR=/usr/share/vim/vim80
$ sudo make install 
2.相反的,卸载需要保留vim文件夹并且安装checkinstall
$ sudo apt-get install checkinstall
sudo cd ~/vim-master
sudo checkinstall

4、安装vim插件管理工具——Vundle

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

5、加载.vimrc文件,.vimrc的内容见原地址 https://github.com/VundleVim/Vundle.vim
在.vimrc中添加如下内容安装YouComPleteMe:
可用命令du -lhs .vim/bundle/YouComPleteMe观察

""""""""""""""""""""" Vundle
set nocompatible
filetype off


set rtp+=~/.vim/bundle/vundle
call vundle#rc()


Bundle 'gmarik/vundle'


Bundle 'Valloric/YouCompleteMe'
Bundle 'Valloric/ListToggle'
Bundle 'scrooloose/syntastic'


filetype plugin indent on
""""""""""""""""""""" Vundle

如果觉得下载速度太慢,可以也可以切换至 .vim/bundle 下手动下载,输入如下命令:

git clone https://github.com/Valloric/YouCompleteMe.git
手动下载完后检查仓库的完整性,切换到 YouCompleteMe 目录下,输入如下命令:

git submodule update --init --recursive

2、安装clang并查看clang版本

1、编译YouComPleteMe需要Clang3.6版本以上:

$ sudo apt-get install clang
$ clang -v

clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.0.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
Candidate multilib: .;@m64
Selected multilib: .;@m64

3、安装cmake和python依赖:

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

4、编译安装YouComPleteMe

$ cd ~/.vim/bundle/YouCompleteMe
$ ./install.py --clang-completer --system-libclang

5、修改.vimrc文件和.ycm_extra_conf.py文件

1、在~/.vimrc文件中添加如下内容:

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'       "配置全局路径
let g:ycm_confirm_extra_conf=0   "每次直接加载该文件,不提示是否要加载

记得其中的单引号是英文格式的,不然会出错。

2、其中.ycm_extra_conf.py文件在~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py目录下:
在flags下添加

'-isystem',
'/usr/include/c++/5.4.0/',
'-isystem',
'/usr/include/x86_64-linux-gnu/c++/',
'-isystem',
'/usr/include/',

若要想实现补全Qt或者其他c、C++头文件,在.ycm_extra_conf.py`的flags下添加以类似格式添加:

'-isystem',
'path/to/headerfile',

Ubuntu 16.04配置安装YouComPleteMe等插件_第1张图片

6、安装NERD Tree插件

1、下载NERD Tree插件

$ git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree

2、编辑.vimrc文件:

nmap <F2> :NERDTreeToggle
" F2打开目录树
let g:NERDTreeWinSize=30
" 目录树横向大小

3、NERD Tree快捷方式:

ctrl + w + h    光标 focus 左侧树形目录
ctrl + w + l    光标 focus 右侧文件显示窗口
ctrl + w + w    光标自动在左右侧窗口切换
ctrl + w + r    移动当前窗口的布局位置
o       在已有窗口中打开文件、目录或书签,并跳到该窗口
go      在已有窗口 中打开文件、目录或书签,但不跳到该窗口
t       在新 Tab 中打开选中文件/书签,并跳到新 Tab
T       在新 Tab 中打开选中文件/书签,但不跳到新 Tab
i       split 一个新窗口打开选中文件,并跳到该窗口
gi      split 一个新窗口打开选中文件,但不跳到该窗口
s       vsplit 一个新窗口打开选中文件,并跳到该窗口
gs      vsplit 一个新 窗口打开选中文件,但不跳到该窗口
!       执行当前文件
O       递归打开选中 结点下的所有目录
x       合拢选中结点的父目录
X       递归 合拢选中结点下的所有目录
e       Edit the current dif
双击    相当于 NERDTree-o
中键    对文件相当于 NERDTree-i,对目录相当于 NERDTree-e
D       删除当前书签
P       跳到根结点
p       跳到父结点
K       跳到当前目录下同级的第一个结点
J       跳到当前目录下同级的最后一个结点
k       跳到当前目录下同级的前一个结点
j       跳到当前目录下同级的后一个结点
C       将选中目录或选中文件的父目录设为根结点
u       将当前根结点的父目录设为根目录,并变成合拢原根结点
U       将当前根结点的父目录设为根目录,但保持展开原根结点
r       递归刷新选中目录
R       递归刷新根结点
m       显示文件系统菜单
cd      将 CWD 设为选中目录
I       切换是否显示隐藏文件
f       切换是否使用文件过滤器
F       切换是否显示文件
B       切换是否显示书签
q       关闭 NerdTree 窗口
?       切换是否显示 Quick Help

4、切换标签页:

:tabnew [++opt选项] [+cmd] 文件      建立对指定文件新的tab
:tabc   关闭当前的 tab
:tabo   关闭所有其他的 tab
:tabs   查看所有打开的 tab
:tabp   前一个 tab
:tabn   后一个 tab

5、安装其余插件:

1、在.vimrc中的Bundle里面添加需要安装的插件即可,下面是我安装的插件:
Bundle 'Valloric/YouCompleteMe'
Bundle 'Valloric/ListToggle'
Bundle 'scrooloose/syntastic'
Bundle 'scrooloose/nerdtree'
Bundle 'klen/python-mode'
Bundle 'croaky/vim-colors-github'
Bundle 'danro/rename.vim'
Bundle 'majutsushi/tagbar'
Bundle 'kchmck/vim-coffee-script'
Bundle 'kien/ctrlp.vim'
Bundle 'pbrisbin/vim-mkdir'
Bundle 'slim-template/vim-slim'
Bundle 'thoughtbot/vim-rspec'
Bundle 'tpope/vim-bundler'
Bundle 'tpope/vim-endwise'
Bundle 'tpope/vim-fugitive'
Bundle 'tpope/vim-rails'
Bundle 'tpope/vim-surround'
Bundle 'vim-ruby/vim-ruby'
Bundle 'vim-scripts/ctags.vim'
Bundle 'vim-scripts/matchit.zip'
Bundle 'vim-scripts/tComment'
Bundle "mattn/emmet-vim"
Bundle "Lokaltog/vim-powerline"
Bundle "godlygeek/tabular"
Bundle "msanders/snipmate.vim"
Bundle "jelera/vim-javascript-syntax"
Bundle "altercation/vim-colors-solarized"
Bundle "othree/html5.vim"
Bundle "xsbeats/vim-blade"
Bundle "Raimondi/delimitMate"
Bundle "groenewege/vim-less"
Bundle "evanmiller/nginx-vim-syntax"
Bundle "Lokaltog/vim-easymotion"
Bundle "tomasr/molokai"

最后在vim中输入:source ~/.vimrc,然后输入命令:BundleInstall安装即可。

7、安装ctags插件

1、首先现在这个网站上下载ctags的压缩文件(类似ctags-x.x.tar.gz的文件):http://ctags.sourceforge.net

2、然后就是解压安装了:

 $ tar -xzvf ctags-x.x.tar.gz --x自行替换 

 $ cd ctags-x.x 
 $ ./configure
 $ make && make install 

3、在.vimrc中加入以下内容:

 set tags=./tags,./../tags,./*/tags --这样的设置可以生成当前目录,上级目录以及当前目录的所有子目录的tags文件

然后绑定快捷键F7就可以,在vim界面下也可以生成tags文件

 map  :!ctags -R  

8、配置powerline插件

1、在.vimrc中写入Bundle "Lokaltog/vim-powerline":BundleInstall后在.vmrc文件中添加:

set guifont=PowerlineSymbols\ for\ Powerline
set nocompatible
set laststatus=2
set t_Co=256
let g:Powerline_symbols = 'fancy'
let Powerline_symbols='compatible'

以下是我的.vimrc文件的配置信息

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'      "配置全局路径

let g:ycm_confirm_extra_conf=0   "每次直接加载该文件,不提示是否要加载

""""""""""""""""""""" Vundle
set nocompatible
filetype off


set rtp+=~/.vim/bundle/vundle
set rtp+={repository_root}/powerline/bindings/vim
call vundle#rc()


Bundle 'gmarik/vundle'


Bundle 'Valloric/YouCompleteMe'
Bundle 'Valloric/ListToggle'
Bundle 'scrooloose/syntastic'
Bundle 'scrooloose/nerdtree'
Bundle 'klen/python-mode'
Bundle 'croaky/vim-colors-github'
Bundle 'danro/rename.vim'
Bundle 'majutsushi/tagbar'
Bundle 'kchmck/vim-coffee-script'
Bundle 'kien/ctrlp.vim'
Bundle 'pbrisbin/vim-mkdir'
Bundle 'slim-template/vim-slim'
Bundle 'thoughtbot/vim-rspec'
Bundle 'tpope/vim-bundler'
Bundle 'tpope/vim-endwise'
Bundle 'tpope/vim-fugitive'
Bundle 'tpope/vim-rails'
Bundle 'tpope/vim-surround'
Bundle 'vim-ruby/vim-ruby'
Bundle 'vim-scripts/ctags.vim'
Bundle 'vim-scripts/matchit.zip'
Bundle 'vim-scripts/tComment'
Bundle "mattn/emmet-vim"
Bundle "Lokaltog/vim-powerline"
Bundle "godlygeek/tabular"
Bundle "msanders/snipmate.vim"
Bundle "jelera/vim-javascript-syntax"
Bundle "altercation/vim-colors-solarized"
Bundle "othree/html5.vim"
Bundle "xsbeats/vim-blade"
Bundle "Raimondi/delimitMate"
Bundle "groenewege/vim-less"
Bundle "evanmiller/nginx-vim-syntax"
Bundle "Lokaltog/vim-easymotion"
Bundle "tomasr/molokai"


filetype plugin indent on
""""""""""""""""""""" Vundle

"""""""""""""""""""""""""""""""""""""""基本设置""""""""""""""""""""""""""""""""""""""""
" 设定默认解码 
set fenc=utf-8 
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936 

" 支持256色,使得vim配色支持终端
set t_Co=256

" C缩进
set smartindent 
set cindent

" 设置背景和字体
colorscheme molokai
set guifont=Source\ Code\ Pro\ 12 

" 不要使用vi的键盘模式,而是vim自己的 
set nocompatible 

" history文件中需要记录的行数 
set history=1000 

" 在处理未保存或只读文件的时候,弹出确认 
set confirm

" 与windows共享剪贴板 
set clipboard+=unnamed 

" 侦测文件类型 
filetype off 

" 为特定文件类型载入相关缩进文件 
filetype indent on 

" 带有如下符号的单词不要被换行分割 
set iskeyword+=_,$,@,%,#,- 

" 语法高亮
syntax enable
syntax on 

"隐藏GUI的工具栏
set guioptions=P

" 不要备份文件 
set nobackup 

" 不要生成swap文件
setlocal noswapfile 

" 字符间插入的像素行数目 
set linespace=0 

" 在状态行上显示光标所在位置的行号和列号 
set ruler 

" 命令行(在状态行下)的高度,默认为1,这里是2 
set cmdheight=2 

" 使回格键(backspace)正常处理indent, eol, start等 
set backspace=indent,eol,start

" 允许backspace和光标键跨越行边界 
set whichwrap+=<,>,b,s,[,]


" 高亮显示匹配的括号 
set showmatch 

" 匹配括号高亮的时间(单位是十分之一秒) 
set matchtime=5 

" 在搜索的时候忽略大小写 
set ignorecase 

" 不要高亮被搜索的句子(phrases) 
set nohlsearch 

" 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索) 
set incsearch 

" 光标移动到buffer的顶部和底部时保持3行距离,窗口滚动最小距离 
set scrolloff=3 

" 2为总显示最后一个窗口的状态行
" 设为1则窗口数多于一个的时候显示最后一个窗口的状态行;
" 0不显示最后一个窗口的状态行 
set laststatus=2 

" 继承前一行的缩进方式,特别适用于多行注释 
""set autoindent 

" 显示行号
set number

" 制表符为4 
set tabstop=4 

" 统一缩进为4 
set softtabstop=4 
set shiftwidth=4 

" 不要用空格代替制表符 
set noexpandtab 

" 不要换行 
" set nowrap 
" set sidescroll=10

" 在行和段开始处使用制表符 
set smarttab 

" Ctrl+A全选,Ctrl+C复制,Ctrl+V粘贴
map  ggvG$ 
imap  ggvG$
vmap  "+y
map  "+p
imap  "+pa

" 括号等的自动匹配
inoremap ( ()i
inoremap [ []i
inoremap { {}i
inoremap ' ''i
inoremap " ""i

" 设置
let mapleader = ","
let maplocalleader = "."

" 可以折叠 
set foldenable 
set foldmethod=manual 

" 自动更新.vimrc
map vo :vsp ~/.vimrc

"""""""""""""""""""""""""""""""""""""""基本设置""""""""""""""""""""""""""""""""""""""""



"""""""""""""""""""""""""""""""""""""
"   NERD Tree插件               "
"""""""""""""""""""""""""""""""""""""
nmap  :NERDTreeToggle
" F2打开目录树
let g:NERDTreeWinSize=30
" 目录树横向大小
let NERDChristmasTree=0

let NERDTreeChDirMode=2
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
let NERDTreeShowBookmarks=1
let NERDTreeWinPos="left"
" Automatically open a NERDTree if no files where specified
autocmd vimenter * if !argc() | NERDTree | endif
" Close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif


"""""""""""""""""""""""""""""""""""""
"   Tagbar   插件               "
"""""""""""""""""""""""""""""""""""""
map tb :Tagbar 
" tb用于打开tagbar
let g:tagbar_width=30
let g:tagbar_autofocus=1
let g:Powerline_symbols = 'fancy'



"""""""""""""""""""""""""""""""""""""
"            主题颜色               "
"""""""""""""""""""""""""""""""""""""
let g:molokai_original = 1
let g:rehash256 = 1
" Color scheme
colorscheme molokai
highlight NonText guibg=#060606
highlight Folded  guibg=#0A0A0A guifg=#9090D0
set rtp+={repository_root}/powerline/bindings/vim



"""""""""""""""""""""""""""""""""""""
"           ctags插件               "
"""""""""""""""""""""""""""""""""""""
set tags=./tags,./../tags,./*/tags 
"--这样的设置可以生成当前目录,上级目录以及当前目录的所有子目录的tags文件
map  :!sudo ctags -R 


"""""""""""""""""""""""""""""""""""""
"           powerline插件           "
"""""""""""""""""""""""""""""""""""""
set guifont=PowerlineSymbols\ for\ Powerline
set nocompatible
set laststatus=2
set t_Co=256
let g:Powerline_symbols = 'fancy'
let Powerline_symbols='compatible'



"""""""""""""""""""""""""""""""""""""
"           YouComPleteMe插件       "
"""""""""""""""""""""""""""""""""""""

let mapleader = '\'
nnoremap gg :YcmCompleter GoToDeclaration 
" 跳转到声明处
nnoremap gd :YcmCompleter GoToDefinition 



""""""""""""""""""""""""""""""""""""""""C语言的编译运行"""""""""""""""""""""""""""""""""""""""""
" 编译C/py语言,运行
augroup ccompile
    autocmd Filetype c map  :w:!gcc % -std=c99 -g -o %< -lm 
    autocmd Filetype cpp map  :w:!g++ % -std=c++11 -g -o %< -lm 
    autocmd Filetype python map  :w:!python2 % 
    autocmd Filetype python map  :w:!python3 % 
augroup END

augroup crun
    autocmd Filetype c map  :! ./%< 
    autocmd Filetype cpp map  :! ./%< 
augroup END

" 整行注释
augroup comment
    autocmd Filetype c noremap  / I//
    autocmd Filetype cpp noremap  / I//
    autocmd Filetype h noremap  / I//
augroup END

augroup nocomment
    autocmd Filetype c noremap  . ^xx
    autocmd Filetype cpp noremap  . ^xx
    autocmd Filetype h noremap  . ^xx
augroup END


" 大括号补全
autocmd Filetype c,cpp,h inoremap { {}O

""""""""""""""""""""""""""""""""""""""""C语言的编译运行"""""""""""""""""""""""""""""""""""""""""



""""""""""""""""""""""""""""""""""""""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""
"新建.c,.h,.sh,.java文件,自动插入文件头 
autocmd BufNewFile *.py,*.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()" 
""定义函数SetTitle,自动插入文件头 
func SetTitle() 
    "如果文件类型为.sh文件 
    if &filetype == 'sh' 
        call setline(1,"\#########################################################################") 
        call append(line("."), "\# File Name: ".expand("%")) 
        call append(line(".")+1, "\# Author: King") 
        call append(line(".")+2, "\# mail: arturiapendragon_1@163.com") 
        call append(line(".")+3, "\# Created Time: ".strftime("%c")) 
        call append(line(".")+4, "\#########################################################################") 
        call append(line(".")+5, "\#!/bin/bash") 
        call append(line(".")+6, "") 
    elseif &filetype == 'python'
        call setline(1,"\#########################################################################") 
        call append(line("."), "\# File Name: ".expand("%")) 
        call append(line(".")+1, "\# Author: King") 
        call append(line(".")+2, "\# mail: arturiapendragon_1@163.com") 
        call append(line(".")+3, "\# Created Time: ".strftime("%c")) 
        call append(line(".")+4, "\#########################################################################") 
        call append(line(".")+5, "\#!/usr/bin/env python3") 
        call append(line(".")+6, "\#! -*- coding: utf-8 -*-") 
    else 
        call setline(1, "/*************************************************************************") 
        call append(line("."), "    > File Name: ".expand("%")) 
        call append(line(".")+1, "    > Author: King") 
        call append(line(".")+2, "    > Mail: arturiapendragon_1@163.com ") 
        call append(line(".")+3, "    > Created Time: ".strftime("%c")) 
        call append(line(".")+4, " ************************************************************************/") 
        call append(line(".")+5, "")
    endif
    if &filetype == 'cpp'
        call append(line(".")+6, "#include")
        call append(line(".")+7, "using namespace std;")
        call append(line(".")+8, "")
    endif
    if &filetype == 'c'
        call append(line(".")+6, "#include")
        call append(line(".")+7, "")
    endif
    "新建文件后,自动定位到文件末尾
    autocmd BufNewFile * normal G
endfunc 

""""""""""""""""""""""""""""""""""""""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""

你可能感兴趣的:(Ubuntu配置)