原諒地址:http://yuez.me/jiang-ni-de-vim-da-zao-cheng-qing-qiao-qiang-da-de-ide/javascript
Vim和Emacs一個稱爲神之編輯器一個被稱爲編輯器之神,當然非常誇張,但也足以說明這兩 款軟件的優秀和在程序員界的地位。可是它們都已漫長的學習曲線讓人望而生畏,阻止了大 多數人進入。做爲一名幾乎徹底使用Vim寫各類代碼、文檔的人,我想把我本身平時使用的 插件和配置整理下來,方便本身的總結和概括,若是能有幸幫助到一些想學習Vim可是又不知 道如何入門的人來講,那就再榮幸不過了。html
在下面的內容中,我會介紹我使用的插件、Vim的配置,最後若是你以爲這些配置手動太麻煩 的話,我推薦你看個人另外一篇文章(從零搭建和配置OSX開發環境), 在那篇文章的末尾,我給出了一個自動化配置和管理Vim的方法。java
先貼一張個人Vim的截圖:jquery

你看的到的插件
從上面那種截圖中肉眼能看到的插件提及,把整個界面按照左窗口、主窗口、右窗口和下窗 口命名,依次介紹出如今這個窗口中的主要插件。git
主窗口
做爲一款主要用於書寫代碼的文本編輯器,一個足夠舒服、靚麗的配色固然是首要考慮的。 我使用的配色主題是molokai
(官方地址),在 你安裝好了這個插件以後,你須要下面幾行配置應用它:程序員
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
" Switch syntax highlighting on, when the terminal has colors if (t_Co > 2 || has("gui_running")) && !exists("syntax_on") syntax on endif " Javascript syntax hightlight syntax enable " Set syntax highlighting for specific file types autocmd BufRead,BufNewFile Appraisals set filetype=ruby autocmd BufRead,BufNewFile *.md set filetype=markdown autocmd Syntax javascript set syntax=jquery " Color scheme colorscheme molokai highlight NonText guibg=#060606 highlight Folded guibg=#0A0A0A guifg=#9090D0 |
另一個推薦的vim主題是solarized
(官方地址)。github
在選定了一個適合本身的主題以後,就須要一些配置去解決排版的問題,好比字符編碼和縮 進等問題。shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
" Backspace deletes like most programs in insert mode set backspace=2 " Show the cursor position all the time set ruler " Display incomplete commands set showcmd " Set fileencodings set fileencodings=utf-8,bg18030,gbk,big5 filetype plugin indent on " Softtabs, 2 spaces set tabstop=2 set shiftwidth=2 set shiftround set expandtab " Display extra whitespace set list listchars=tab:»·,trail:· " Make it obvious where 80 characters is set textwidth=80 set colorcolumn=+1 " Numbers set number set numberwidth=5 set matchpairs+=<:> set hlsearch |
在第68行,水平和垂直方向分別有一條高亮條,這是用來表示我當 前光標所處於的行和列 用的。實現它,只須要幾行簡單的配置就能夠了:vim
1
2
3
4
|
" Highlight current line au WinLeave * set nocursorline nocursorcolumn au WinEnter * set cursorline cursorcolumn set cursorline cursorcolumn |
關於代碼補全
有些人可能已經發現了,在個人主窗口中沒有演示代碼補全的功能,我須要對此作一個說明。 我本人不喜歡過於強大的代碼補全,因此默認的對於我來講已經徹底足夠了,若是你須要使 用更強大的代碼補全,我推薦你使用YouCompleteMe
(官方地址)。ruby

左窗口
左窗口是一個用於瀏覽目錄結構的插件nerdtree
(官方地址)。 一樣一些簡單的配置以後,它便能爲你提供一個方便夠用的功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
" NERD tree let NERDChristmasTree=0 let NERDTreeWinSize=35 let NERDTreeChDirMode=2 let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$'] let NERDTreeShowBookmarks=1 let NERDTreeWinPos="left" " Automatically open a NERDTree if no files where specified autocmd vimenter * if !argc() | NERDTree | endif " Close vim if the only window left open is a NERDTree autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif " Open a NERDTree nmap <F5> :NERDTreeToggle<cr> |
右窗口
在個人截圖中,右窗口陳列出了我當前打開的rb文件中申明的類、變量及方法等等。這是一 款名叫tagbar
的插件,它爲咱們提供了一個簡單的方式去瀏覽當前文件的結構,而且支持 在各個標籤之間快捷的跳轉。同理,安裝以後,須要一些配置:
1
2
3
4
|
" Tagbar let g:tagbar_width=35 let g:tagbar_autofocus=1 nmap <F6> :TagbarToggle<CR> |
若是你發現默認的Tagbar
不能支持你的語言,好比Css, Clojure, Markdown等等,你能夠 參照這篇文章爲它提供額外的支持。
下窗口
下窗口包含了兩個部分:一個是用於全局搜索的窗口和一個狀態條。
全局搜索是一個基於文件名的搜索功能,能夠快速定位一個文件。這是ctrlp
這個插件提 供的功能。下面是ctrlp
的一些配置:
1
2
3
|
" ctrap set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.png,*.jpg,*.jpeg,*.gif " MacOSX/Linux let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$' |
ctrlp
默認會使用grep
進行搜索,效率低且慢。因此,我使用了ag
去替換默認的搜索 功能。ag是一款輕量級的搜索工具,速度很是快。爲了集成ag,須要添加下列配置:
1
2
3
4
5
6
7
8
|
if executable('ag') " Use Ag over Grep set grepprg=ag\ --nogroup\ --nocolor " Use ag in CtrlP for listing files. let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' " Ag is fast enough that CtrlP doesn't need to cache let g:ctrlp_use_caching = 0 endif |
下面狀態條中會依次顯示:當前模式、Git分支、文件路徑、文件是否保存以及當前所載行和 列的信息。這是經過vim-powerline
來實現的。其中顯示Git信息須要配合vim-fugitive
插件一些使用。
1
2
|
set laststatus=2 " Always display the status line set statusline+=%{fugitive#statusline()} " Git Hotness |
小結
經過以上的配置,你就能夠擁有一些如第一張圖所示的那樣,看起來還不錯的編輯器。固然, Vim之因此如此倍受推崇,只是依靠這些仍是遠遠不夠的。接下來,我要介紹一些看不見的插 件來實實在在的提高Vim體驗。
看不見的實用插件
現代化的插件管理
在個人另外一篇文章中(從零搭建和配置OSX開發環境) ,我已經詳細介紹過Vundle
這個管理Vim插件的一個軟件,這裏不作過多介紹。
在Vim中執行你想要運行的命令
vim-run-interactive
讓你能夠在Vim中執行幾乎任何你想要在命令行中執行的命令。舉例 來講,假設你有條git update
的自定義命令,你能夠經過:RunInInteractiveShell git update
來執行它,而不須要退出Vim。添加一條配置,能夠簡化這個步驟:
1
2
|
" Run commands that require an interactive shell nnoremap <Leader>r :RunInInteractiveShell<space> |
如此一來,你能夠經過<Leader> + r + 命令
鍵來激活執行命令。若是你不知道什麼是Leader
鍵,你能夠去百度或者Google一下。
Vim的語法檢查
Vim中有個很強大的語法檢查插件,它支持幾乎全部經常使用的語言的語法檢測[syntastic
(https://github.com/scrooloose/syntastic)]。 附上一張來自官方的截圖:

爲了讓它更好的工做,一樣須要一些配置:
1
2
3
4
5
6
7
8
9
|
" configure syntastic syntax checking to check on open as well as save let g:syntastic_check_on_open=1 let g:syntastic_html_tidy_ignore_errors=[" proprietary attribute \"ng-"] let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_wq = 0 set statusline+=%#warningmsg# set statusline+=%{SyntasticStatuslineFlag()} set statusline+=%* |
Rails集成開發套件
我是一名Ruby的愛好者,因此Vim中少不了針對Ruby的一系列插件。我做爲一名Web開發者, Rails這個大名鼎鼎的框架天然也是有所涉獵。因此在個人Vim中有着針對它們開發的一套插 件。
插件列表:
1
2
3
4
5
6
7
8
9
|
" Cucumber navigation commands autocmd User Rails Rnavcommand step features/step_definitions -glob=**/* -suffix=_steps.rb autocmd User Rails Rnavcommand config config -glob=**/* -suffix=.rb -default=routes " RSpec.vim mappings map <Leader>t :call RunCurrentSpecFile()<CR> map <Leader>s :call RunNearestSpec()<CR> map <Leader>l :call RunLastSpec()<CR> map <Leader>a :call RunAllSpecs()<CR> |
更多好用的工具
還有不少好用的插件,若是每一個都一一說明,那麼篇幅再長一倍怕也是不夠。因此,我這裏 就把一些好用的插件列出來,有興趣的能夠本身看看。
備註
有更多的一些插件我沒有都列出來,它們通常用於特定語法的開發,不必定適合全部人。你 能夠參考從零搭建和配置OSX開發環境 這篇文章,自動管理、配置你的Vim環境。
在上文中,我有一些遺漏的或者錯誤的地方,但願朋友發現後能夠在下方留言指正。若是你 有一些更好的插件、配置,也懇請你在下方留言。謝謝。