Vim 实用指南

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 |
; | 重复最后一次字符级别搜索 | , |
// | 重复最后一次搜索 | 无 |
逐渐替换
- * 查找光标下的单词
- cwHello<Esc> 修改这个单词并退出插入模式
- n 查找下一个单词
- . 重复命令
剪贴板
- “+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 横向分屏
- s 排序
- / 根据名称查找
- i 在新的纵向分屏窗口打开文件
- s 在新的横向分屏窗口打开文件
文件跳转
- <C-o> 向后
- <C-i> 向前
- gf 根据光标所在位置的名称跳转到相应文件,通常需要插件的帮助