vim: Vim配置、插件和使用技巧
June 9, 2015
 
vim_cheat_sheet_for_programmers.png
常言道:工欲善其事,必先利其器 ,作为一个程序员,一个常用的工具就是 编辑器,我选择一个能极大提高自己开发效率的编辑器 vim(有些人可能选择 emacs)。而 vim编辑器方面具有以下几种特性:
- 
跨平台及统一环境无论是在windows还是在*nix,vim是一个很完美的跨平台文本编辑器,甚至可以直接在服务器平台CentOS,Ubuntu等直接配置使用,配置文件大同小异,操作习惯基本相同。 
- 
定制化及可扩展 vim提供一个 vimrc的配置文件来配置vim,并且自己可以定制一些插件来实现文件浏览( NERD Tree),代码补全( YouCompleteMe,语法检查( syntastic),文件模糊搜索( ctrlp),显示vim状态栏( Vim Powerline),主题颜色( Molokai),显示文件结构( tagbar)等多种功能。 
- 
高效命令行使用vim编辑文本,只需在键盘上操作就可以,根本无需用到鼠标。就拿光标移动来说,与重复击键、一个字符一个字符或一行一行移动相比,按一次键就能以词、行、块或函数为单位移动,效率高得多。有时一些重复删除、粘帖的操作,也只需一条命令就可以完成,甚至你可以用键映射来简化或组合多种命令来提高效率。 
Table of Contents
配置
如果你需要配置vim,只需在Home目录创建一个 ~/.vimrc文件即可以配置vim了,可以参考我的 vimrc配置文件。由于我需要安装插件,并且将需要安装的插件列表分离到另外一个文件 ~/.vimrc.bundles,这个文件也是存放在Home目录,文件内容可以参考 vimrc.bundles。若想加载 ~/.vimrc.bundles文件,必须在 ~/.vimrc文件加入以下代码片段:
if filereadable(expand("~/.vimrc.bundles>"))   source ~/.vimrc.bundles endif 
插件
插件管理工具vunble
vundle是vim的插件管理工具,它能够搜索、安装、更新和移除vim插件,再也不需要手动管理vim插件。
- 在 Home目录创建 ~/.vim目录和 .vimrc文件(可复制我的 vimrc文件)
- 
安装vundle git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle 
- 
在.vimrc配置文件中添加vundle支持      
filetype off set rtp+=~/.vim/bundle/vundle/ call vundle#rc() 但实际上我是添加一个 ~/.vimrc.bundles文件来保存所有插件的配置,必须在 ~/.vimrc文件加入以下代码片段: if filereadable(expand("~/.vimrc.bundles>")) source ~/.vimrc.bundles endif而 ~/.vimrc.bundles文件内容必须包含: filetype off set rtp+=~/.vim/bundle/vundle/ call vundle#rc() 你可以复制到我 
 ~/.vimrc.bundles文件到 Home目录。
安装插件
bundle分为三类,比较常用就是 第二种:
- 在Github vim-scripts 用户下的repos,只需要写出repos名称
- 在Github其他用户下的repos, 需要写出”用户名/repos名”
- 不在Github上的插件,需要写出git全路径
 
Bundle Type.png
将安装的插件在 ~/.vimrc配置,但是我是将插件配置信息放在 ~/.vimrc.bundles:
" Define bundles via Github repos Bundle 'christoomey/vim-run-interactive' Bundle 'Valloric/YouCompleteMe' Bundle 'croaky/vim-colors-github' Bundle 'danro/rename.vim' Bundle 'majutsushi/tagbar' Bundle 'kchmck/vim-coffee-script' Bundle 'kien/ctrlp.vim' Bundle 'pbrisbin/vim-mkdir' Bundle 'scrooloose/syntastic' Bundle 'slim-template/vim-slim' Bundle 'thoughtbot/vim-rspec' Bundle 'tpope/vim-bundler' Bundle 'tpope/vim-endwise' Bundle 'tpope/vim-fugitive' Bundle 'tpope/vim-rails' Bundle 'tpope/vim-surround' Bundle 'vim-ruby/vim-ruby' Bundle 'vim-scripts/ctags.vim' Bundle 'vim-scripts/matchit.zip' Bundle 'vim-scripts/tComment' Bundle >"mattn/emmet-vim" Bundle >"scrooloose/nerdtree" Bundle >"Lokaltog/vim-powerline" Bundle >"godlygeek/tabular" Bundle >"msanders/snipmate.vim" Bundle >"jelera/vim-javascript-syntax" Bundle >"altercation/vim-colors-solarized" Bundle >"othree/html5.vim" Bundle >"xsbeats/vim-blade" Bundle >"Raimondi/delimitMate" Bundle >"groenewege/vim-less" Bundle >"evanmiller/nginx-vim-syntax" Bundle >"Lokaltog/vim-easymotion" Bundle >"tomasr/molokai" Bundle >"klen/python-mode"
打开vim,运行    :BundleInstall
或在shell中直接运行    vim +BundleInstall +qall
 
Install Bundle.png
常用插件
NERD Tree
NERD Tree是一个树形目录插件,方便浏览当前目录有哪些目录和文件。
 
NERD Tree Plugin Bundle.png
我在 ~/.vimrc文件中配置NERD Tree,设置一个启用或禁用 NERD Tree的键映射
nmap <f5> :NERDTreeToggle<cr>
 
NERD Tree Configuration.png
所以你只需按 F5键就能启用或禁用 NERD Tree,NERD Tree提供一些常用快捷键来操作目录:
- 通过 hjkl来移动光标
- o打开关闭文件或目录,如果想打开文件,必须光标移动到文件名
- t在标签页中打开
- s和 i可以水平或纵向分割窗口打开文件
- p到上层目录
- P到根目录
- K到同目录第一个节点
- P到同目录最后一个节点
YouCompleteMe & syntastic
YouCompleteMe是一个快速、支持模糊匹配的vim代码补全引擎。由于它是基于 Clang引擎为C/C++/Objective-C提供代码提示,也支持其他语言代码提示的引擎,例如基于 Jedi的Python代码补全,基于 OmniSharp的C#代码补全,基于 Gocode的Go代码补全。
 
YouCompleteMe.gif
只需敲入代码,就自动提示想输入的代码列表,你可以选择其中一个,然后 tab键就可以补全代码。
YouCompleteMe已经集成了 Syntastic,所以一旦你编写代码时语法错误,就会有红色错误提示
 
syntastic.png
ctrlp
不知道你有没有遇到这样一种情况:在大规模的工程项目中,目录和文件嵌套比较深,打开一个文件要逐个逐个进入目录才能打开,这样的话,比较耗时间和效率很低, ctrlp重新定义打目录和文件方式,特别适用于大规模项目文件的浏览。
启用ctrlp
- 
运行命令      :CtrlP
 或:CtrlP [starting-directory]
 来以查找文件模式来启用 ctrlp
- 
运行命令      :CtrlPBuffer
 或:CtrlPMRU
 来以查找缓冲或最近打开文件模式来启用 ctrlp
- 
运行命令      CtrlPMixed
 来查找文件、查找缓冲和最近打开文件混合模式来启动 ctrlp
基本使用
- 
按      
 和
 在三种查找模式中互相切换
- 
按      
 来创建新文件和对应的父目录
- 
按      
 来切换到只查找文件名而不是全路径
- 
按      
 ,
 或箭头方向键来移动查找结果列表
- 
按      
 或
 ,
 来以新标签或分割窗口的方式来打开文件
- 
按      
 来标识或取消标识文件,然后按
 来打开文件
- 
按      
 ,
 来在提示历史中选择下一个/上一个字符串
演示视频
具体如何使用ctrlp,请参考happypetterd的
演示视频
,讲解非常清楚。
Vim Powerline
Vim Powerline是一个显示vim状态栏插件,它能够显示vim模式、操作环境、编码格式、行数/列数等信息
 
Vim Powerline.png
Molokai
Molokai是vim颜色主题,效果如下
 
Molokai Color Scheme for Vim.png
常用命令
对于入门vim基本命令可以参考简明 Vim 练级攻略,以下是本人关于 移动光标、 插入/修改、 删除、 复制、 粘帖、 撤销和恢复等常用命令
- 
移动光标 - 
对于在          行内移动,通过使用          f/F + 字符
 来移动到特定的字符,然后再使用.
 来重复执行命令;f
 表示向前移动,F
 表示向后移动。如果想直接移动到行首或行尾,使用^
 或$
- 
对于在          多行移动,就有多种选择:          第一种是通过          gg
 ,G
 ,行数 + G
 指定行数来移动,gg
 表示移动文件的第一行,G
 表示移动文件的最后一行,行数 + G
 表示移动到特定的行。 第二种就是通过 正则搜索的方式来移动,/string
 表示正向查找,?string
 表示反向查找,n
 查找下一个匹配的结果,N
 表示上一个匹配的结果,按up/down
 可以浏览搜索历史。 第三种就是使用 标记来移动,m + {a-z}
 标记位置(适用于单个文件,如果是多个文件,使用大写字母{A-Z}
 ),`{mark}
 移动到标记位置的列,'{mark}
 移动到标记位置的行首,还有一些特殊的标记,'
 表示跳转前光标的位置
 
- 
对于在          行内移动,通过使用          
- 
选择文本 v
 不规则选择V
 按行选择Ctrl + V
 按列选择
- 
插入/修改 i
 在当前字符前面插入I
 在行首插入a
 在当前字符后面插入A
 在行尾插入o
 在当前行的下一行插入O
 在当前行的上一行插入r
 更改当前的字符R
 更改多个字符cw/caw
 更改单词cf + 字符
 更改从当前字符到指定字符c$
 更改从当前字符到行尾cc
 更改整行
- 
删除 x
 删除字符df + 字符
 删除从当前字符到指定字符dw/daw
 删除单词d$
 删除从当前光标到行尾dd
 删除一行
- 
剪切与粘帖 dd + p
 delete一行,然后放在当前光标下方dd + P
 delete一行,然后放在当前光标上方dw + p
 delete单词,然后放在当前光标后面dw + P
 delete单词,然后放在当前光标前面p/P
 可接受计数前缀,重复粘贴
- 
复制 yw
 复制单词yf
 复制从当前字符到指定字符y$
 复制当前光标到行尾yy
 复制整行
- 
撤销和恢复 u
 撤销ctrl + r
 重做
- 
重复操作 数字+action
 表示执行某个操作多少次.
 重复上一个操作
- 
宏录制 q + 寄存器(a-z)
 开始录制录制动作
 >q
 停止录制@ + 寄存器 / @@replay被录制的宏
扩展阅读
- 
Vim配置
 >
 从零搭建和配置OSX开发环境
 >
 将你的Vim 打造成轻巧强大的IDE
- 
Vim插件
 >
 vim中的杀手级插件: vundle
 >
 谁说Vim不是IDE?(三)
 >
 vim中的杀手级插件: YouCompleteMe
- 
Vim入门和使用技巧
 >
 简明 Vim 练级攻略
- 
  
				
				
				
				
				
				
	
	
	
				
			
		
			
		
0 Comments