引言
今天我們特地來講講這個vim的配置. vim這東西, 很多人裝逼的時候經常會提到, 不過大部分人對個vim的配置還是很陌生的, 因為
這個編輯器的學習成本還是有點高的, 但是不要緊, 今天我們就把這座大山給干掉. 順便說一句, 本人因為比較懶, 博客更新不是很
頻繁,還是吸取教訓,以后盡量多寫一點.
正文
安裝vim
關於vim的安裝, 我這里針對的vim是7.4版本, 有些人是7.2版本, 這個是不符合我的要求的. 因此, 我先演示一把, 把自己機器的vim
給刪除了, 給大家示范如何安裝vim. 我的系統是centos7.0, 如果是別的linux系統的同學, 可以自己去調整.
sudo yum remove vim
一路按y就能搞定.
下載vim7.4安裝包, http://www.vim.org/download.php.
建立目錄:
sudo mkdir -p /data1/tools
sudo mkdir -p /data1/thd
用rz -e將vim74安裝包上傳上去, 並進行解壓操作.
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
下面我們進行編譯:
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:
哈哈, 什么都沒有, 太沒意思了, 對吧. 下面我們就把這個vim配置成和IDE差不多的環境.
配置基本的展示形態
首先, 我們建立目錄存放我們的主題
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
nnoremap
nnoremap
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了, 如果你去配置, 我相信你一定會遇到不少問題, 但是我想, 這總是一個很好的經歷, 它會培養你的耐心和毅力, 也會變得更加成熟.希望你也去試試哇!