一个文档让vim飞起来

原文地址:http://www.cnblogs.com/songfy/p/5635757.html

引言

今天咱们特意来说讲这个vim的配置. vim这东西, 不少人装逼的时候常常会提到, 不过大部分人对个vim的配置仍是很陌生的, 由于
这个编辑器的学习成本仍是有点高的, 可是没关系, 今天咱们就把这座大山给干掉. 顺便说一句, 本人由于比较懒, 博客更新不是很
频繁,仍是吸收教训,之后尽可能多写一点.javascript

正文

安装vim

关于vim的安装, 我这里针对的vim是7.4版本, 有些人是7.2版本, 这个是不符合个人要求的. 所以, 我先演示一把, 把本身机器的vim
给删除了, 给你们示范如何安装vim. 个人系统是centos7.0, 若是是别的linux系统的同窗, 能够本身去调整.php

sudo yum remove vim

一路按y就能搞定.html

下载vim7.4安装包, http://www.vim.org/download.php.前端

创建目录:java

sudo mkdir -p /data1/tools sudo mkdir -p /data1/thd

用rz -e将vim74安装包上传上去, 并进行解压操做.python

sudo cp vim-7.4.tar.bz2 ../thd/ cd ../thd/ sudo tar jxvf vim-7.4.tar.bz2 sudo rm -rf vim-7.4.tar.bz2

下面咱们进行编译:linux

cd vim74/src/ sudo ./configure --with-features=huge --enable-rubyinterp --enable-pythoninterp --with-python-config-dir=/usr/lib64/python2.7/config/ --enable-cscope --enable-multibyte --enable-gui=gtk2 --prefix=/usr sudo make -j4 sudo make install

咱们来看一下咱们的vim:
nginx

哈哈, 什么都没有, 太没意思了, 对吧. 下面咱们就把这个vim配置成和IDE差很少的环境.git

配置基本的展现形态

首先, 咱们创建目录存放咱们的主题github

mkdir -p  ~/.vim/colors

这个目录就是给咱们存放主题用的, 咱们用什么主题呢? 这里咱们采用molokai这个主题, 固然若是读者愿意用别的主题,
也是能够的, 下一个就行.

http://www.vim.org/scripts/script.php?script_id=2340下载molokai主题, 拷贝到~/.vim/colors目录下, 建立.vimrc文件.

touch ~/.vimrc

将下面的内容拷贝到.vimrc中.

set modelines=0 "设置更好的删除 set backspace=2 syntax on "语法高亮 "用浅色高亮当前行 autocmd InsertLeave * se nocul autocmd InsertEnter * se cul set smartindent "智能对齐 set autoindent "自动对齐 set confirm "在处理未保存或只读文件的时候,弹出确认框 set tabstop=4 "tab键的宽度 set softtabstop=4 set shiftwidth=4 "统一缩进为4 set expandtab "不要用空格替代制表符 set number "显示行号 set history=50 "历史纪录数 set hlsearch set incsearch "搜素高亮,搜索逐渐高亮 set gdefault "行内替换 set encoding=utf-8 set fileencodings=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936,utf-16,big5,euc-jp,latin1 "编码设置 colorscheme molokai set guifont=Menlo:h16:cANSI "设置字体 set langmenu=zn_CN.UTF-8 set helplang=cn "语言设置 set ruler "在编辑过程当中,在右下角显示光标位置的状态行 set laststatus=1 "老是显示状态行 set showcmd "在状态行显示目前所执行的命令,未完成的指令片断也会显示出来 set scrolloff=3 "光标移动到buffer的顶部和底部时保持3行的距离 set showmatch "高亮显示对应的括号 set matchtime=5 "对应括号高亮时间(单位是十分之一秒) set autowrite "在切换buffer时自动保存当前文件 set wildmenu "加强模式中的命令行自动完成操做 set linespace=2 "字符间插入的像素行数目 set whichwrap=b,s,<,>,[,] "开启normal 或visual模式下的backspace键空格键,左右方向键,insert或replace模式下的左方向键,右方向键的跳行功能 filetype plugin indent on "分为三部分命令:file on,file plugin on,file indent on 分别是自动识别文件类型, 用用文件类型脚本,使用缩进定义文件 set foldenable "容许折叠 set cursorline "突出显示当前行 set magic "设置魔术?神马东东 set ignorecase "搜索忽略大小写 filetype on "打开文件类型检测功能 set background=dark set t_Co=256 "256色 set mouse=a "容许鼠标

这时候, 咱们能够发现咱们的vim变成了:

插件安装

这一部分比上面的样式重要的多, 这里主要是讲插件的使用, 而这些插件大大增长了vim的性能.

1.vbundle 管理插件的插件

咱们的插件若是一个一个安装的话, 这可能会搞死你, 所以咱们但愿有一个可以自动安装和管理插件的插件.
这就是咱们要说的vbundle, 可参考https://github.com/VundleVim/Vundle.vim.

安装很是简单:

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

而后咱们来看看配置, 也很是简单.

set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins "call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required " To ignore plugin indent changes, instead use: "filetype plugin on " " Brief help " :PluginList - lists configured plugins " :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate " :PluginSearch foo - searches for foo; append `!` to refresh local cache " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal " " see :h vundle for more details or wiki for FAQ " Put your non-Plugin stuff after this line

在vimrc中把上面的代贴在最前面便可.

咱们须要添加插件的话, 只要在begin和end之间加入便可.

2. nerdtree插件

在begin和end之间加入

Plugin 'scrooloose/nerdtree'

输入命令

:PluginInstall

配置nerdtree:

let NERDTreeQuitOnOpen=1 "打开文件时关闭树 let NERDTreeShowBookmarks=1 "显示书签

配置快捷键:

let mapleader = "," map <leader>ne :NERDTreeToggle<CR> map <leader>tl :TlistToggle<cr> nnoremap <leader>ma :set mouse=a<cr> nnoremap <leader>mu :set mouse=<cr>

保存vimrc,输入,ne, 咱们看看:

彷佛有那么点意思!

3. tagbar插件

安装方式:

Plugin 'majutsushi/tagbar' 

设置键:

nmap <leader>tb :TagbarToggle<CR>

彷佛已经愈来愈接近咱们想要的了.

4.autopair插件

这个插件就是给括号自动配对的.

Plugin 'jiangmiao/auto-pairs'

5.minibuffer 插件

安装插件:

Plugin 'minibufexpl.vim'

配置插件

let g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplMapWindowNavArrows = 1 let g:miniBufExplMapCTabSwitchBufs = 1 

配置快捷键:

nmap <leader>mmbe :MiniBufExplorer<CR> nmap <leader>mmbc :CMiniBufExplorer<CR> nmap <leader>mmbu :UMiniBufExplorer<CR> nmap <leader>mmbt :TMiniBufExplorer<CR>

效果以下:

6. taglist插件

功能相似于tagbar
安装:

Plugin 'taglist.vim' 

配置:

let Tlist_Use_Right_Window=1 "taglist 显示在右侧 let Tlist_Exit_OnlyWindow=1 "taglist 只剩下一个窗口时,自动关闭 let Tlist_File_Fold_Auto_Close=1

快捷键:
map tl :TlistToggle
nnoremap ev :vsplit $MYVIMRC
nnoremap sv :source $MYVIMRC

7. nerd comment插件

这个插件是用来自动添加注释的插件.

安装:

Plugin 'scrooloose/nerdcommenter'

8. 代码折叠

配置:

"使用语法高亮定义代码折叠
set foldmethod=syntax "打开文件是默认不折叠代码 set foldlevelstart=99

zc 折叠
zC 对所在范围内全部嵌套的折叠点进行折叠
zo 展开折叠
zO 对所在范围内全部嵌套的折叠点展开
[z 到当前打开的折叠的开始处。]z 到当前打开的折叠的末尾处。
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。

9. markdown插件安装

安装:

Plugin 'godlygeek/tabular' Plugin 'plasticboy/vim-markdown'

配置:

let g:vim_markdown_math = 1 let g:vim_markdown_frontmatter = 1 let g:vim_markdown_toml_frontmatter = 1 let g:vim_markdown_json_frontmatter = 1

效果:

10.youcompleteme插件

YouCompleteMe:一个随键而全的、支持模糊搜索的、高速补全的插件。YCM 由 google 公司搜索项目组的软件工程师 Strahinja Val Markovic 所开发,YCM 后端调用 libclang(以获取AST,固然还有其余语言的语义分析库)、前端由 C++ 开发(以提高补全效 率)、外层由 python 封装(以成为 vim 插件),这是至今为止最强大也是
最难安装的插件之一, 有不少人都砸在这个插件上了, 咱们来看看如何安装这个插件.

安装插件:

Plugin 'Valloric/YouCompleteMe'

打开vim,输入:PluginInstall, vim会自动去从git上clone出项目, 把这个项目安装到项目目录上.

安装完毕后. 咱们进入到插件目录

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

又是须要漫长的等待, 等他安装好.

在vimrc中配置YouCompleteMe:

let g:ycm_key_list_select_completion = ['<Down>'] let g:ycm_key_list_previous_completion = ['<Up>'] let g:ycm_confirm_extra_conf=0 "关闭加载.ycm_extra_conf.py提示 let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项 let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都从新生成匹配项 let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全 " 在注释输入中也能补全 let g:ycm_complete_in_comments = 1 " 在字符串输入中也能补全 let g:ycm_complete_in_strings = 1 "注释和字符串中的文字也会被收入补全 let g:ycm_collect_identifiers_from_comments_and_strings = 0 let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py' nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> nnoremap <leader>lo :lopen<CR> "open locationlist nnoremap <leader>lc :lclose<CR> "close locationlist inoremap <leader><leader> <C-x><C-o>" inoremap <leader><leader> <C-x><C-o> nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>

咱们开看看效果:

完整配置文件以下:

set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins " call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' " nerdtree插件 Plugin 'scrooloose/nerdtree' " tagbar Plugin 'majutsushi/tagbar' " auto pair Plugin 'jiangmiao/auto-pairs' " mini buffer Plugin 'minibufexpl.vim' " tag list Plugin 'taglist.vim' " nerd commit Plugin 'scrooloose/nerdcommenter' " PHP mannual Plugin 'alvan/vim-php-manual' " snippets mate Plugin 'MarcWeber/vim-addon-mw-utils' Plugin 'tomtom/tlib_vim' Plugin 'garbas/vim-snipmate' Plugin 'honza/vim-snippets' " markdown插件 Plugin 'godlygeek/tabular' Plugin 'plasticboy/vim-markdown' " you complete me插件 Plugin 'Valloric/YouCompleteMe' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required " To ignore plugin indent changes, instead use: " filetype plugin on " Brief help " :PluginList - lists configured plugins " :PluginInstall - installs plugins; append `!` to update or just " :PluginUpdate " :PluginSearch foo - searches for foo; append `!` to refresh local cache " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal " see :h vundle for more details or wiki for FAQ " Put your non-Plugin stuff after this line set modelines=0 "设置更好的删除 set backspace=2 syntax on "语法高亮 "用浅色高亮当前行 autocmd InsertLeave * se nocul autocmd InsertEnter * se cul set smartindent "智能对齐 set autoindent "自动对齐 set confirm "在处理未保存或只读文件的时候,弹出确认框 set tabstop=4 "tab键的宽度 set softtabstop=4 set shiftwidth=4 "统一缩进为4 set expandtab "不要用空格替代制表符 set number "显示行号 set history=50 "历史纪录数 set hlsearch set incsearch "搜素高亮,搜索逐渐高亮 set gdefault "行内替换 set encoding=utf-8 set fileencodings=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936,utf-16,big5,euc-jp,latin1 "编码设置 colorscheme molokai set guifont=Menlo:h16:cANSI "设置字体 set langmenu=zn_CN.UTF-8 set helplang=cn "语言设置 set ruler "在编辑过程当中,在右下角显示光标位置的状态行 set laststatus=1 "老是显示状态行 set showcmd "在状态行显示目前所执行的命令,未完成的指令片断也会显示出来 set scrolloff=3 "光标移动到buffer的顶部和底部时保持3行的距离 set showmatch "高亮显示对应的括号 set matchtime=5 "对应括号高亮时间(单位是十分之一秒) set wildmenu "加强模式中的命令行自动完成操做 set linespace=2 "字符间插入的像素行数目 set whichwrap=b,s,<,>,[,] "开启normal 或visual模式下的backspace键空格键,左右方向键,insert或replace模式下的左方向键,右方向键的跳行功能 filetype plugin indent on "分为三部分命令:file on,file plugin on,file indent on 分别是自动识别文件类型, 用用文件类型脚本,使用缩进定义文件 syntax enable set foldenable "容许折叠 set cursorline "突出显示当前行 set magic "设置魔术?神马东东 set ignorecase "搜索忽略大小写 filetype on "打开文件类型检测功能 set background=dark set t_Co=256 "256色 set mouse=a "容许鼠标 "使用语法高亮定义代码折叠 set foldmethod=syntax ""打开文件是默认不折叠代码 set foldlevelstart=99" " nerdtree 配置 let NERDTreeQuitOnOpen=1 "打开文件时关闭树 let NERDTreeShowBookmarks=1 "显示书签 " taglist 配置 let Tlist_Use_Right_Window=1 "taglist 显示在右侧 let Tlist_Exit_OnlyWindow=1 "taglist 只剩下一个窗口时,自动关闭 let Tlist_File_Fold_Auto_Close=1 " -- MiniBufferExplorer -- let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,能够切换到当前窗口的上下左右窗口 let g:miniBufExplMapWindowNavArrows = 1 "按下Ctrl+箭头,能够切换到当前窗口的上下左右窗口 let g:miniBufExplMapCTabSwitchBufs = 1 "启用如下两个功能:Ctrl+tab移到下一个buffer并在当前窗口打开;Ctrl+Shift+tab移到上一个buffer并在当前窗口打开;ubuntu好像不支持 let g:miniBufExplMapCTabSwitchWindows = 1 " 启用如下两个功能:Ctrl+tab移到下一个窗口;Ctrl+Shift+tab移到上一个窗口;ubuntu好像不支持 let g:miniBufExplModSelTarget = 1 " 不要在不可编辑内容的窗口(如TagList窗口)中打开选中的buffer " markdown 配置 let g:vim_markdown_math = 1 let g:vim_markdown_frontmatter = 1 let g:vim_markdown_toml_frontmatter = 1 let g:vim_markdown_json_frontmatter = 1 " YouCompleteMe配置 let g:ycm_key_list_select_completion = ['<Down>'] let g:ycm_key_list_previous_completion = ['<Up>'] let g:ycm_confirm_extra_conf=0 "关闭加载.ycm_extra_conf.py提示 let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项 let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都从新生成匹配项 let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全 " 在注释输入中也能补全 let g:ycm_complete_in_comments = 1 " 在字符串输入中也能补全 let g:ycm_complete_in_strings = 1 "注释和字符串中的文字也会被收入补全 let g:ycm_collect_identifiers_from_comments_and_strings = 0 let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py' let mapleader = "," map <leader>ne :NERDTreeToggle<CR> nmap <leader>tb :TagbarToggle<CR> nmap <leader>mmbe :MiniBufExplorer<CR> nmap <leader>mmbc :CMiniBufExplorer<CR> nmap <leader>mmbu :UMiniBufExplorer<CR> nmap <leader>mmbt :TMiniBufExplorer<CR> map <leader>tl :TlistToggle<cr> nnoremap <leader>ev :vsplit $MYVIMRC<cr> nnoremap <leader>sv :source $MYVIMRC<cr> nnoremap <leader>ma :set mouse=a<cr> nnoremap <leader>mu :set mouse=<cr> nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> nnoremap <leader>lo :lopen<CR> "open locationlist nnoremap <leader>lc :lclose<CR> "close locationlist inoremap <leader><leader> <C-x><C-o>" inoremap <leader><leader> <C-x><C-o> nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> "对搜索的设置 map ft :call Search_Word()<CR>:copen<CR> function Search_Word() let w = expand("<cword>") " 在当前光标位置抓词 execute "vimgrep " . w . " %" endfunction

总结

这就是咱们配置好的vim了, 若是你去配置, 我相信你必定会遇到很多问题, 可是我想, 这老是一个很好的经历, 它会培养你的耐心和毅力, 也会变得更加成熟.但愿你也去试试哇!

相关文章
相关标签/搜索