Ubuntu 16.04配置安装YouComPleteMe等插件

时间:2021-10-25 17:24:40

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等插件

6、安装NERD Tree插件

1、下载NERD Tree插件

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

2、编辑.vimrc文件:

nmap <F2> :NERDTreeToggle<cr>
" 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 <F7> <Esc>:!ctags -R <CR><CR> 

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 <C-A> ggvG$ imap <C-A> <Esc>ggvG$ vmap <C-C> "+y<Esc> map <C-V> "+p imap <C-V> <Esc>"+pa " 括号等的自动匹配 inoremap ( ()<Esc>i inoremap [ []<Esc>i inoremap { {}<Esc>i inoremap ' ''<Esc>i inoremap " ""<Esc>i " 设置<leader>和<localleader> let mapleader = "," let maplocalleader = "." " 可以折叠 set foldenable set foldmethod=manual " 自动更新.vimrc map <leader>vo <Esc>:vsp ~/.vimrc<CR> """""""""""""""""""""""""""""""""""""""基本设置"""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""" " NERD Tree插件 " """"""""""""""""""""""""""""""""""""" nmap <F2> :NERDTreeToggle<cr> " 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 <Esc>:Tagbar <CR> " 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 <F7> <Esc>:!sudo ctags -R <CR><CR> """"""""""""""""""""""""""""""""""""" " 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 <leader>gg :YcmCompleter GoToDeclaration<CR> " 跳转到声明处 nnoremap <leader>gd :YcmCompleter GoToDefinition<CR> """"""""""""""""""""""""""""""""""""""""C语言的编译运行""""""""""""""""""""""""""""""""""""""""" " <F5>编译C/py语言,<F6>运行 augroup ccompile autocmd Filetype c map <F5> <Esc>:w<CR>:!gcc % -std=c99 -g -o %< -lm <CR> autocmd Filetype cpp map <F5> <Esc>:w<CR>:!g++ % -std=c++11 -g -o %< -lm <CR> autocmd Filetype python map <F5> <Esc>:w<CR>:!python2 % <CR> autocmd Filetype python map <F5> <Esc>:w<CR>:!python3 % <CR> augroup END augroup crun autocmd Filetype c map <F6> <Esc>:! ./%< <CR> autocmd Filetype cpp map <F6> <Esc>:! ./%< <CR> augroup END " 整行注释 augroup comment autocmd Filetype c noremap <buffer> <localleader>/ I//<Esc> autocmd Filetype cpp noremap <buffer> <localleader>/ I//<Esc> autocmd Filetype h noremap <buffer> <localleader>/ I//<Esc> augroup END augroup nocomment autocmd Filetype c noremap <buffer> <localleader>. ^xx autocmd Filetype cpp noremap <buffer> <localleader>. ^xx autocmd Filetype h noremap <buffer> <localleader>. ^xx augroup END " 大括号补全 autocmd Filetype c,cpp,h inoremap {<CR> {<CR>}<Esc>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<iostream>") call append(line(".")+7, "using namespace std;")
        call append(line(".")+8, "") endif if &filetype == 'c' call append(line(".")+6, "#include<stdio.h>") call append(line(".")+7, "") endif "新建文件后,自动定位到文件末尾 autocmd BufNewFile * normal G endfunc """"""""""""""""""""""""""""""""""""""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""