Vim 是 UNIX 系统自带 vi 编辑器的改良版,其高度可配置的特性让文本编辑变得很高效,Vim 通常被认为是程序员的文本编辑器,配合一些插件来写代码很流畅。本文不是 Vim 详细入门指南,而是对常见问题的收录整理,你可以买一本 《Vim实用技巧》 来学习使用 Vim。

Vim 学习和使用建议

学习 Vim 最好的方式不是了解所有的命令组合,这样毫无意义,首先需要知道基本的一些概念,然后就实际地用起来,当你发现你在重复一些操作命令的时候,想一想 Vim 可以通过什么方法来帮助你减少重复从而提高效率。

普通模式

命令 + 动作(或者文本对象)= 行动

单字符命令

  • x 删除光标下的字符
  • r 替换光标下的字符
  • s 删除光标下字符并进入插入模式

其他命令

  • d 删除
  • c 修改
  • y 拷贝
  • p 粘贴
  • > 右缩进
  • < 左缩进
  • = 自动缩进
  • g~ 切换大小写
  • gu 变小写
  • gU 变大写

动作

  • f{char} 移动光标到该字符
  • t{char} 移动光标到该字符的前一个位置
  • b 上一个文字开头
  • w 下一个文字开头
  • j 下一行
  • k 上一行
  • h 前一列
  • l 后一列
  • ^ 行头
  • $ 行尾
  • NG 到第 N 行
  • gg 页首
  • G 页尾

文本对象

  • iw 对当前文字的行动
  • it 对 XML 或者 HTML 标签中内容的行动
  • i{ 对大括号中内容的行动,也可以是 ( 或者 [

提高效率,不要重复

重复命令 命令作用 撤消命令
. 重复最后一次普通模式命令 u
n 重复最后一次搜索 N
; 重复最后一次字符级别搜索 ,
// 重复最后一次搜索

逐渐替换

  1. * 查找光标下的单词
  2. cwHello<Esc> 修改这个单词并退出插入模式
  3. n 查找下一个单词
  4. . 重复命令

剪贴板

  • “+y 拷贝到剪贴板,+ 是剪贴板寄存器
  • “+p 从剪贴板粘贴

插入模式

  • i 光标前进入插入模式
  • I 移动到行首并进入插入模式
  • a 光标后进入插入模式
  • A 移动到行尾并进入插入模式
  • o 在新的一行开始插入
  • O 在新的上一行开始插入
  • s 删除光标下字符并进入插入模式

可视模式

  • v 进入字符级别的可视模式
  • V 进入行级别的可视模式

命令行模式

指定区间

  • 通过可视模式来选择
  • :{start},{end} 指定开始行号和结束行号
  • % 选择所有

执行命令

  • :[range]sort 排序
  • :[range]t{address} 拷贝
  • :[range]m{address} 移动
  • :[range]normal {normal mode command} 执行普通模式下的命令,如 :%normal A; 所有行后加;

Shell

  • !ls 运行 Shell 命令
  • :shell 开始交互式的 Shell 对话, $exit 结束

全局替换

:%s/target/replacement/g % 是命令行模式选择所有,s/target/replacement 是替换命令,g 全局修饰符 i 大小写不敏感 c 需要确认

缓冲

  • :n abc.rb 新建文件
  • :sav 另存为
  • <C-w> 命令可以用于在窗口间跳转
  • :sp 纵向分屏
  • :vsp 横向分屏

Buffer Explorer

  • s 排序
  • / 根据名称查找

NerdTree

  • i 在新的纵向分屏窗口打开文件
  • s 在新的横向分屏窗口打开文件

文件跳转

  • <C-o> 向后
  • <C-i> 向前
  • gf 根据光标所在位置的名称跳转到相应文件,通常需要插件的帮助

插件

使用 Vundle 来管理 Vim 插件很方便,只需要在 .vimrc 中申明然后就可以自动安装了