今天咱們特意來說講這個vim的配置. vim這東西, 不少人裝逼的時候常常會提到, 不過大部分人對個vim的配置仍是很陌生的, 由於
這個編輯器的學習成本仍是有點高的, 可是沒關係, 今天咱們就把這座大山給幹掉. 順便說一句, 本人由於比較懶, 博客更新不是很
頻繁,仍是吸收教訓,之後儘可能多寫一點.javascript
關於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的性能.
咱們的插件若是一個一個安裝的話, 這可能會搞死你, 所以咱們但願有一個可以自動安裝和管理插件的插件.
這就是咱們要說的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之間加入便可.
在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, 咱們看看:
彷佛有那麼點意思!
安裝方式:
Plugin 'majutsushi/tagbar'
設置鍵:
nmap <leader>tb :TagbarToggle<CR>
彷佛已經愈來愈接近咱們想要的了.
這個插件就是給括號自動配對的.
Plugin 'jiangmiao/auto-pairs'
安裝插件:
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>
效果以下:
功能相似於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
這個插件是用來自動添加註釋的插件.
安裝:
Plugin 'scrooloose/nerdcommenter'
配置:
"使用語法高亮定義代碼摺疊
set foldmethod=syntax "打開文件是默認不折疊代碼 set foldlevelstart=99
zc 摺疊
zC 對所在範圍內全部嵌套的摺疊點進行摺疊
zo 展開摺疊
zO 對所在範圍內全部嵌套的摺疊點展開
[z 到當前打開的摺疊的開始處。]z 到當前打開的摺疊的末尾處。
zj 向下移動。到達下一個摺疊的開始處。關閉的摺疊也被計入。
zk 向上移動到前一折疊的結束處。關閉的摺疊也被計入。
安裝:
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
效果:
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了, 若是你去配置, 我相信你必定會遇到很多問題, 可是我想, 這老是一個很好的經歷, 它會培養你的耐心和毅力, 也會變得更加成熟.但願你也去試試哇!