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


引言

今天我們特地來講講這個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 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了, 如果你去配置, 我相信你一定會遇到不少問題, 但是我想, 這總是一個很好的經歷, 它會培養你的耐心和毅力, 也會變得更加成熟.希望你也去試試哇!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM