2012-11-27 By BeiYuu
最近整理了VIM的配置,换上插件管理的神器—–Vundle,由他引发的VIM生态环境的改善,堪称完美。遂打算写一份简单的教程,分享Git时代VIM新世界的美丽动人之处。对VIM有基础的同学,可直接跳至插件管理部分。
第一次使用VIM,会觉得无所适从,他并不像记事本,你敲什么键就显示什么,理解VIM的需要明白他的两种模式:
命令模式下,可以做移动、编辑操作;编辑模式则用来输入。键入i,o,s,a等即可进入编辑模式,后面解释原因。
模式的设计是VIM和其他编辑器最不同的地方,优势和劣势也全基于此而生。
以下介绍的键盘操作,都是大小写敏感的,并且要在命令模式下完成,需注意:
这四个键在右手最容易碰到几个位置,最为常用。
助记:0(第0个字符),^和$含义同正则表达式
- { 上一段(以空白行分隔) - } 下一段(以空白行分隔) - % 跳到当前对应的括号上(适用各种配对符号)
限于篇幅,在这里我仅介绍下我非常常用的几个操作。
因为VIM所有的操作都是原子化的,所以把这些操作程序化就非常简单了:
VIM的基本操作,可以挖掘的东西非常多,不仅仅需要记忆,更需要自己去探索总结,熟练之后,效率会大幅度提升。后面会给出一些参考链接。
终于到这篇Blog我最想讨论的部分了。VIM的强大不仅仅体现在操作的高效率,更有强大而充沛的插件做支援,插件丰富了之后,就面临查找和管理的问题。
在遇见Vundle之前,我用Pathogen管理插件。Pathogen还算方便,只需要把相应插件,放在bundle目录下即可,不需要再像以前那样逐个放置单独的文件到相应目录,大大节省了劳动力,管理起来也一目了然,觉得还不错,至少比vimball那种需要执行命令安装的方式好一些。
我真希望我早些遇见Vundle。Vundle受到Pathogen和Vimball的启发,于是有了现在的模样。Vundle的逻辑是这样的:
完美的世界!
Vundle的安装很简单:
git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle然后写配置文件.vimrc :
set nocompatible " be iMproved filetype off " required! set rtp+=~/.vim/bundle/vundle/ call vundle#rc() " let Vundle manage Vundle " required! Bundle 'gmarik/vundle' " vim-scripts repos Bundle 'vim-plugin-foo' Bundle 'vim-plugin-bar' filetype plugin indent on " required!
其中Bundle后面的内容,就是插件的名字,插件维护在Vim-Script.org。
然后,打开VIM之后,可以输入以下命令:
"安装插件: :BundleInstall "更新插件: :BundleInstall! "卸载不在列表中的插件: :BundleClean
现在大部分的插件都已经从Vim.org迁移到了Vim-Script.org,而且很多作者也认领了自己的插件,直接在这个Github的项目下更新,一个比Vim.org更科学更有效的生态环境,就这样完美的形成了。
在此非常严重的感谢vim-scripts.org的创建者Scott Bronson,和Vundle的作者gmarik。他们的创新和分享精神,让这个世界又美好了一些。
也感谢业界良心Github。Vim-Scripts.org整站就是用Github Pages建立维护的,对于个人来说,这是很好的选择,有兴趣的同学可以参看我之前的博客:使用Github Pages建独立博客。
有了Vundle,再装插件就是件享受的事情了。我常用的插件有:
Bundle 'ctrlp.vim' Bundle 'AutoClose' Bundle 'ZenCoding.vim' Bundle 'matchit.zip' Bundle 'ShowTrailingWhitespace' Bundle '_jsbeautify' Bundle 'EasyMotion' Bundle 'FencView.vim' Bundle 'The-NERD-tree' Bundle 'The-NERD-Commenter' Bundle 'snipMate'
以上插件都可以在vim-script.org找到源码和详细的使用文档,简单说明下:
这是我认为VIM最不能缺少的插件,在VIM的编辑窗口树状显示文件目录,没什么好多说的,必需品。
相比于Command-T之类的查找文件的插件,ctrlp.vim最大的好处在于,无需安装其他的包,只要他自己,就可以很好的工作了,恩,就是需要这样干净利落的解决问题。
ZenCoding是一个神级的插件,用他可以让你一种神奇而无比爽快的感觉写HTML、CSS,官网上有动画演示,你一定会心动的。
最近看到别人介绍,开始使用的一个插件,用全新的方式在文档中高效的移动光标,和ZenCoding一样,属于革命性的方便好用,这里有教程,你一定也会心动的。
又一个解放生产力的神奇,简单配置,就可以按照自己的风格快速输入大段代码。
贴一下我的vimrc配置,注释都有,仅供参考:
"必须的设置: filetype off filetype plugin indent on "打开高亮 syntax enable "不要兼容vi set nocompatible "使用color solarized set background=dark colorscheme solarized "terminal下面的背景问题 let g:solarized_termtrans=1 let g:solarized_termcolors=256 let g:solarized_contrast="high" let g:solarized_visibility="high" set modelines=0 "tab键的设定 set tabstop=4 set shiftwidth=4 set softtabstop=4 set expandtab "一些其他的设定 "字符设置 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5 "set encoding=utf-8 set scrolloff=3 "新建文件编码 set fenc=utf-8 set autoindent set hidden "设置光标高亮显示 set cursorline set cursorcolumn set ttyfast set ruler set backspace=indent,eol,start "set laststatus=2 "相对行号 要想相对行号起作用要放在显示行号后面 set relativenumber "显示行号 "set number "无限undo "set undofile "自动换行 set wrap "禁止自动换行 "set nowrap "GUI界面里的字体,默认有抗锯齿 set guifont=Inconsolata:h12 "自动载入配置文件不需要重启 "autocmd! bufwritepost _vimrc source % "将-连接符也设置为单词 set isk+=- "设置大小写敏感和聪明感知(小写全搜,大写完全匹配) set ignorecase set smartcase "set gdefault set incsearch set showmatch set hlsearch "加入html标签配对 "runtime macros/matchit.vim "以下设置用来是vim正确显示过长的行 "set textwidth=80 "set formatoptions=qrnl "彩色显示第85行 set colorcolumn=85 "设置256色显示 set t_Co=256 "行号栏的宽度 set numberwidth=4 "初始窗口的宽度 "set columns=135 "初始窗口的高度 "set lines=50 "初始窗口的位置 "winpos 620 45 "匹配括号的规则,增加针对html的<> "set matchpairs=(:),{:},[:],<:> "让退格,空格,上下箭头遇到行首行尾时自动移到下一行(包括insert模式) set whichwrap=b,s,<,>,[,] "插入模式下移动 inoremap <c-j> <down> inoremap <c-k> <up> inoremap <c-l> <right> inoremap <c-h> <left> "=================================================== "leader键的功能设置 "修改leader键为逗号 let mapleader="," "esc的映射 imap jj <esc> "屏蔽掉讨厌的F1键 inoremap <F1> <ESC> nnoremap <F1> <ESC> vnoremap <F1> <ESC> "修改vim的正则表达 nnoremap / /\v vnoremap / /\v "使用tab键来代替%进行匹配跳转 nnoremap <tab> % vnoremap <tab> % "折叠html标签 ,fold tag nnoremap <leader>ft vatzf "使用,v来选择刚刚复制的段落,这样可以用来缩进 nnoremap <leader>v v`] "使用,w来垂直分割窗口,这样可以同时查看多个文件,如果想水平分割则<c-w>s nnoremap <leader>w <c-w>v<c-w>l nnoremap <leader>wc <c-w>c nnoremap <leader>ww <c-w>w "使用<leader>t来控制Tab的切换 nnoremap <leader>t gt nnoremap <leader>r gT "使用<leader>空格来取消搜索高亮 nnoremap <leader><space> :noh<cr> "html中的js加注释 取消注释 nmap <leader>h I//jj nmap <leader>ch ^xx "切换到当前目录 nmap <leader>q :execute "cd" expand("%:h")<CR> "搜索替换 nmap <leader>s :,s///c "取消粘贴缩进 nmap <leader>p :set paste<CR> nmap <leader>pp :set nopaste<CR> "文件类型切换 nmap <leader>fj :set ft=javascript<CR> nmap <leader>fc :set ft=css<CR> nmap <leader>fx :set ft=xml<CR> nmap <leader>fm :set ft=mako<CR> "设置隐藏gvim的菜单和工具栏 F2切换 set guioptions-=m set guioptions-=T "去除左右两边的滚动条 set go-=r set go-=L map <silent> <F2> :if &guioptions =~# 'T' <Bar> \set guioptions-=T <Bar> \set guioptions-=m <bar> \else <Bar> \set guioptions+=T <Bar> \set guioptions+=m <Bar> \endif<CR> "=================================================== "插件的设置 "Indent Guides设置 let g:indent_guides_guide_size=1 set rtp+=~/.vim/bundle/vundle/ call vundle#rc() " let Vundle manage Vundle " required! Bundle 'gmarik/vundle' " vim-scripts repos Bundle 'ctrlp.vim' Bundle 'AutoClose' Bundle 'ZenCoding.vim' Bundle 'matchit.zip' Bundle 'ShowTrailingWhitespace' "jsbeautify的设置 Bundle '_jsbeautify' nnoremap <leader>_ff :call g:Jsbeautify()<CR> "EasyMotion设置 Bundle 'EasyMotion' let g:EasyMotion_leader_key = '<Leader><Leader>' "Fencview的初始设置 Bundle 'FencView.vim' let g:fencview_autodetect=1 "NerdTree的设置 并且相对行号显示 Bundle 'The-NERD-tree' nmap <leader>nt :NERDTree<cr>:set rnu<cr> let NERDTreeShowBookmarks=1 let NERDTreeShowFiles=1 let NERDTreeShowHidden=1 let NERDTreeIgnore=['\.$','\~$'] let NERDTreeShowLineNumbers=1 let NERDTreeWinPos=1 "对NERD_commenter的设置 Bundle 'The-NERD-Commenter' let NERDShutUp=1 "支持单行和多行的选择,//格式 map <c-h> ,c<space>
VIM在一开始会觉得非常不习惯,一定要坚持下去,收获的会更多,不仅仅是在装大侠方面的哦~
关于VIM的使用,这篇博客仅仅介绍了很小的一部分,网络上还有大量朋友总结的心得,常学常有收获: