一個小博客教你把vim用飛起來

引言

今天咱們特意來說講這個vim的配置. vim這東西, 不少人裝逼的時候常常會提到, 不過大部分人對個vim的配置仍是很陌生的, 由於
這個編輯器的學習成本仍是有點高的, 可是沒關係, 今天咱們就把這座大山給幹掉. 順便說一句, 本人由於比較懶, 博客更新不是很
頻繁,仍是吸收教訓,之後儘可能多寫一點.php

正文

安裝vim

關於vim的安裝, 我這裏針對的vim是7.4版本, 有些人是7.2版本, 這個是不符合個人要求的. 所以, 我先演示一把, 把本身機器的vim
給刪除了, 給你們示範如何安裝vim. 個人系統是centos7.0, 若是是別的linux系統的同窗, 能夠本身去調整.前端

sudo yum remove vim

一路按y就能搞定.python

下載vim7.4安裝包, http://www.vim.org/download.php.linux

創建目錄:git

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

用rz -e將vim74安裝包上傳上去, 並進行解壓操做.github

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

下面咱們進行編譯:json

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:
ubuntu

哈哈, 什麼都沒有, 太沒意思了, 對吧. 下面咱們就把這個vim配置成和IDE差很少的環境.vim

配置基本的展現形態

首先, 咱們創建目錄存放咱們的主題後端

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了, 若是你去配置, 我相信你必定會遇到很多問題, 可是我想, 這老是一個很好的經歷, 它會培養你的耐心和毅力, 也會變得更加成熟.但願你也去試試哇!

相關文章
相關標籤/搜索