Vim和Emacs一个称为神之编辑器一个被称为编辑器之神,当然非常夸张,但也足以说明这两 款软件的优秀和在程序员界的地位。可是它们都已漫长的学习曲线让人望而生畏,阻止了大 多数人进入。做为一名几乎彻底使用Vim写各类代码、文档的人,我想把我本身平时使用的 插件和配置整理下来,方便本身的总结和概括,若是能有幸帮助到一些想学习Vim可是又不知 道如何入门的人来讲,那就再荣幸不过了。javascript
在下面的内容中,我会介绍我使用的插件、Vim的配置,最后若是你以为这些配置手动太麻烦 的话,我推荐你看个人另外一篇文章(从零搭建和配置OSX开发环境), 在那篇文章的末尾,我给出了一个自动化配置和管理Vim的方法。php
先贴一张个人Vim的截图:html
从上面那种截图中肉眼能看到的插件提及,把整个界面按照左窗口、主窗口、右窗口和下窗 口命名,依次介绍出如今这个窗口中的主要插件。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
左窗口是一个用于浏览目录结构的插件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-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中有个很强大的语法检查插件,它支持几乎全部经常使用的语言的语法检测[syntastic(https://github.com/scrooloose/syntastic)]。 附上一张来自官方的截图:
为了让它更好的工做,一样须要一些配置:
" 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+=%*
我是一名Ruby的爱好者,因此Vim中少不了针对Ruby的一系列插件。我做为一名Web开发者, Rails这个大名鼎鼎的框架天然也是有所涉猎。因此在个人Vim中有着针对它们开发的一套插 件。
插件列表:
" 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环境。
taglist是一个用于显示定位程序中各类符号的插件,例如宏定义、变量名、结构名、函数名这些东西 咱们将其称之为符号(symbols),而在taglist中将其称之为tag。显然,要想将程序文件中的tag显示出来,须要事先了解所有tag的信 息,并将其保存在一个文件中,而后去解析对应的tag文件。taglist作的仅仅是将tag文件中的内容解析完后显示在Vim上而已。tag扫描以及数 据文件的生成则是由ctags(Exuberant Ctags)这一工具完成的,因此在使用taglist以前,你的电脑须要装有ctags。
NERDTree是一个用于浏览文件系统的树形资源管理外挂,它可让你像使用Windows档案总管同样在VIM中浏览文件系统而且打开文件或目录。
咱们上面介绍了用于文件浏览的nerdtree以及浏览程序符号的taglist,这两个插件都会以窗口的形式出如今Vim的窗口中,那么如何合理的安排它们,这就是winmanager的做用。
这里,咱们利用winmanager将nerdtree和taglist放到同一个”侧边栏”中,nerdtree在上方,taglist在下方,效果以下图所示:
若是你是一个酷爱写注释的程序员的话,那么你必定要用一下nerdcommenter,即使你不热衷于写注释,你也应该关注下nerdcommenter这款插件。
nerdcommenter和Vim的Visual模式结合能够快速的注释/取消注释多行代码,同时在行尾追加注释并自动进入Insert模式能够方便的进行行内注释。
用过了不少补全插件,最后仍是选择了neocomplete。neocomplete.vim是来自shougo的做品,该插件维护了当前buffer的一个关键词列表,从而提供强大的关键词补全功能。
配色使用的是我钟爱的monokai,可是换了深色配色,使用了一个molokai配色插件。之因此叫molokai,由于这个配色是monokai的修改版,将monokai的背景色改成了深色。我想要一个深色背景的molokai.正和我意啊。
接下来介绍一下我的很是喜欢的一个插件vim-airline。这是一款状态栏加强插件,可让你的Vim状态栏很是的美观,同时包括了buffer显示条扩展smart tab line以及集成了一些插件。
ctrlp是一款至关棒的插件,主要的功能是对文件进行模糊的查找,若是你的project目录结构复杂,或者你正在阅读一个较大的项目的话,那么ctrlp能够帮你快速的定位到你想要文件而没必要在终端不断的cd、ls。
Vim是内置支持Grep的,Vim7.3更是更新了Grep的引擎,在Vim内Grep的速度更快了。可是Vim中的Grep同样不容易掌握,还好有不少简化Grep的插件能够用,包括grep的变种ack,这其中使用起来最方便的,最人性化的要数EasyGrep了。
以前使用过tpope的pathogen, 使用git submodule和pathogen, 管理插件已经大大简化。而今天介绍的vundle, 更是把git操做整合进去,用户须要作的只是去Github上找到本身想要的插件的名字,安装,更新和卸载均可有vundle来完成了。虽然去发现一个好 的插件仍然是一个上下求索的过程,可是用户已经能够从安装配置的繁琐过程解脱了。