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

xf3f 9年前發布 | 746K 次閱讀 Vim

Vim和Emacs一個稱為神之編輯器一個被稱為編輯器之神,固然很是夸張,但也足以說明這兩 款軟件的優秀和在程序員界的地位。但是它們都已漫長的學習曲線讓人望而生畏,阻止了大 多數人進入。作為一名幾乎完全使用Vim寫各種代碼、文檔的人,我想把我自己平時使用的 插件和配置整理下來,方便自己的總結和歸納,如果能有幸幫助到一些想學習Vim但是又不知 道如何入門的人來說,那就再榮幸不過了。

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

先貼一張我的Vim的截圖:

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

你看的到的插件

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

主窗口

作為一款主要用于書寫代碼的文本編輯器,一個足夠舒服、靚麗的配色當然是首要考慮的。 我使用的配色主題是molokai(官方地址),在 你安裝好了這個插件之后,你需要下面幾行配置應用它:

" 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</pre>

另外一個推薦的vim主題是solarized(官方地址)。

在選定了一個適合自己的主題之后,就需要一些配置去解決排版的問題,比如字符編碼和縮 進等問題。

" 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</pre>
在第68行,水平和垂直方向分別有一條高亮條,這是用來表示我當 前光標所處于的行和列 用的。實現它,只需要幾行簡單的配置就可以了:

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

關于代碼補全

有些人可能已經發現了,在我的主窗口中沒有演示代碼補全的功能,我需要對此做一個說明。 我本人不喜歡過于強大的代碼補全,所以默認的對于我來說已經完全足夠了,如果你需要使 用更強大的代碼補全,我推薦你使用YouCompleteMe(官方地址)。

YouCompleteMe

左窗口

左窗口是一個用于瀏覽目錄結構的插件nerdtree(官方地址)。 同樣一些簡單的配置之后,它便能為你提供一個方便夠用的功能。

" 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測試。
  • </ul>

    " 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></pre>

    更多好用的工具

    還有很多好用的插件,如果每個都一一說明,那么篇幅再長一倍怕也是不夠。所以,我這里 就把一些好用的插件列出來,有興趣的可以自己看看。

 本文由用戶 xf3f 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!