將你的Vim 打形成輕巧強大的IDE

Vim和Emacs一個稱爲神之編輯器一個被稱爲編輯器之神,當然非常誇張,但也足以說明這兩 款軟件的優秀和在程序員界的地位。可是它們都已漫長的學習曲線讓人望而生畏,阻止了大 多數人進入。做爲一名幾乎徹底使用Vim寫各類代碼、文檔的人,我想把我本身平時使用的 插件和配置整理下來,方便本身的總結和概括,若是能有幸幫助到一些想學習Vim可是又不知 道如何入門的人來講,那就再榮幸不過了。javascript

在下面的內容中,我會介紹我使用的插件、Vim的配置,最後若是你以爲這些配置手動太麻煩 的話,我推薦你看個人另外一篇文章(從零搭建和配置OSX開發環境), 在那篇文章的末尾,我給出了一個自動化配置和管理Vim的方法。php

先貼一張個人Vim的截圖:html

將你的Vim 打形成輕巧強大的IDE

你看的到的插件

從上面那種截圖中肉眼能看到的插件提及,把整個界面按照左窗口、主窗口、右窗口和下窗 口命名,依次介紹出如今這個窗口中的主要插件。java

主窗口

做爲一款主要用於書寫代碼的文本編輯器,一個足夠舒服、靚麗的配色固然是首要考慮的。 我使用的配色主題是molokai(官方地址),在 你安裝好了這個插件以後,你須要下面幾行配置應用它:jquery

" 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(官方地址)。git

在選定了一個適合本身的主題以後,就須要一些配置去解決排版的問題,好比字符編碼和縮 進等問題。程序員

" 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行,水平和垂直方向分別有一條高亮條,這是用來表示我當 前光標所處於的行和列 用的。實現它,只須要幾行簡單的配置就能夠了:github

" Highlight current line
au WinLeave * set nocursorline nocursorcolumn
au WinEnter * set cursorline cursorcolumn
set cursorline cursorcolumn

 

關於代碼補全

有些人可能已經發現了,在個人主窗口中沒有演示代碼補全的功能,我須要對此作一個說明。 我本人不喜歡過於強大的代碼補全,因此默認的對於我來講已經徹底足夠了,若是你須要使 用更強大的代碼補全,我推薦你使用YouCompleteMe(官方地址)。shell

YouCompleteMe

左窗口

左窗口是一個用於瀏覽目錄結構的插件nerdtree(官方地址)。 一樣一些簡單的配置以後,它便能爲你提供一個方便夠用的功能。vim

" 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的插件,它爲咱們提供了一個簡單的方式去瀏覽當前文件的結構,而且支持 在各個標籤之間快捷的跳轉。同理,安裝以後,須要一些配置:

" Tagbar
let g:tagbar_width=35
let g:tagbar_autofocus=1
nmap <F6> :TagbarToggle<CR>

 

若是你發現默認的Tagbar不能支持你的語言,好比Css, Clojure, Markdown等等,你能夠 參照這篇文章爲它提供額外的支持。

下窗口

下窗口包含了兩個部分:一個是用於全局搜索的窗口和一個狀態條。

全局搜索是一個基於文件名的搜索功能,能夠快速定位一個文件。這是ctrlp這個插件提 供的功能。下面是ctrlp的一些配置:

" 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,須要添加下列配置:

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插件一些使用。

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。添加一條配置,能夠簡化這個步驟:

" Run commands that require an interactive shell
nnoremap <Leader>r :RunInInteractiveShell<space>

 

如此一來,你能夠經過<Leader> + r + 命令鍵來激活執行命令。若是你不知道什麼是Leader鍵,你能夠去百度或者Google一下。

Vim的語法檢查

Vim中有個很強大的語法檢查插件,它支持幾乎全部經常使用的語言的語法檢測[syntastic(https://github.com/scrooloose/syntastic)]。 附上一張來自官方的截圖:

syntastic plugin

爲了讓它更好的工做,一樣須要一些配置:

" 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中有着針對它們開發的一套插 件。

插件列表:

  • ruby-vim:在快速的在module, class, method中跳躍。
  • vim-bundler:在Vim中集成Bundler。
  • vim-endwise:自動補全end關鍵字。
  • vim-rails:它的功能不少,能夠說是用 Vim開發Rails不可缺乏的一個插件。更詳細的信息,能夠前往它的官方網站獲取。
  • vim-rspec:在Vim中執行Rspec測試。
" 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環境。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Vim十大必備插件

    1. Taglist

      taglist是一個用於顯示定位程序中各類符號的插件,例如宏定義、變量名、結構名、函數名這些東西 咱們將其稱之爲符號(symbols),而在taglist中將其稱之爲tag。顯然,要想將程序文件中的tag顯示出來,須要事先了解所有tag的信 息,並將其保存在一個文件中,而後去解析對應的tag文件。taglist作的僅僅是將tag文件中的內容解析完後顯示在Vim上而已。tag掃描以及數 據文件的生成則是由ctags(Exuberant Ctags)這一工具完成的,因此在使用taglist以前,你的電腦須要裝有ctags。

    2. NERDTree

      NERDTree是一個用於瀏覽文件系統的樹形資源管理外掛,它可讓你像使用Windows檔案總管同樣在VIM中瀏覽文件系統而且打開文件或目錄。

    3. WinManager

      咱們上面介紹了用於文件瀏覽的nerdtree以及瀏覽程序符號的taglist,這兩個插件都會以窗口的形式出如今Vim的窗口中,那麼如何合理的安排它們,這就是winmanager的做用。

      這裏,咱們利用winmanager將nerdtree和taglist放到同一個」側邊欄」中,nerdtree在上方,taglist在下方,效果以下圖所示:

      Vim十大必備插件

    4. NerdCommenter

      若是你是一個酷愛寫註釋的程序員的話,那麼你必定要用一下nerdcommenter,即使你不熱衷於寫註釋,你也應該關注下nerdcommenter這款插件。

      nerdcommenter和Vim的Visual模式結合能夠快速的註釋/取消註釋多行代碼,同時在行尾追加註釋並自動進入Insert模式能夠方便的進行行內註釋。

    5. Neocomplete

      用過了不少補全插件,最後仍是選擇了neocomplete。neocomplete.vim是來自shougo的做品,該插件維護了當前buffer的一個關鍵詞列表,從而提供強大的關鍵詞補全功能。

    6. Molokai

      配色使用的是我鍾愛的monokai,可是換了深色配色,使用了一個molokai配色插件。之因此叫molokai,由於這個配色是monokai的修改版,將monokai的背景色改成了深色。我想要一個深色背景的molokai.正和我意啊。

    7. Vim-airline

      接下來介紹一下我的很是喜歡的一個插件vim-airline。這是一款狀態欄加強插件,可讓你的Vim狀態欄很是的美觀,同時包括了buffer顯示條擴展smart tab line以及集成了一些插件。Vim十大必備插件

    8. Ctrlp

      ctrlp是一款至關棒的插件,主要的功能是對文件進行模糊的查找,若是你的project目錄結構複雜,或者你正在閱讀一個較大的項目的話,那麼ctrlp能夠幫你快速的定位到你想要文件而沒必要在終端不斷的cd、ls。

    9. EasyGrep

      Vim是內置支持Grep的,Vim7.3更是更新了Grep的引擎,在Vim內Grep的速度更快了。可是Vim中的Grep同樣不容易掌握,還好有不少簡化Grep的插件能夠用,包括grep的變種ack,這其中使用起來最方便的,最人性化的要數EasyGrep了。

    10. Vundle

      以前使用過tpope的pathogen, 使用git submodule和pathogen, 管理插件已經大大簡化。而今天介紹的vundle, 更是把git操做整合進去,用戶須要作的只是去Github上找到本身想要的插件的名字,安裝,更新和卸載均可有vundle來完成了。雖然去發現一個好 的插件仍然是一個上下求索的過程,可是用戶已經能夠從安裝配置的繁瑣過程解脫了。

相關文章
相關標籤/搜索