zoukankan      html  css  js  c++  java
  • 将你的Vim 打造成轻巧强大的IDE

    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

    另外一个推荐的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


    在第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测试。
    " 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来完成了。虽然去发现一个好 的插件仍然是一个上下求索的过程,但是用户已经可以从安装配置的繁琐过程解脱了。

  • 相关阅读:
    POJ1486 Sorting Slides 二分图or贪心
    POJ2060 Taxi Cab Scheme 最小路径覆盖
    POJ3083 Children of the Candy Corn 解题报告
    以前的文章
    POJ2449 Remmarguts' Date K短路经典题
    这一年的acm路
    POJ3014 Asteroids 最小点覆盖
    POJ2594 Treasure Exploration 最小路径覆盖
    POJ3009 Curling 2.0 解题报告
    POJ2226 Muddy Fields 最小点集覆盖
  • 原文地址:https://www.cnblogs.com/dongguolei/p/7902570.html
Copyright © 2011-2022 走看看