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
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
$ sudo apt-get install build-essential cmake
$ sudo apt-get install python-dev python3-dev
$ cd ~/.vim/bundle/YouCompleteMe
$ ./install.py --clang-completer --system-libclang
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',
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
安装即可。
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
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'
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
""""""""""""""""""""""""""""""""""""""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""