# 插入模式和退出VIM的方法
VIM 具有 6 种基本模式和 5 种派生模式。
基本模式:普通模式、插入模式、可视模式、选择模式、命令行模式和 Ex 模式;
派生模式:操作符等待模式、插入普通模式、插入可视模式、插入选择模式和替换模式


# 删除命令、数字的奥义、撤销和恢复命令



# 粘贴命令、替换命令、替换模式和修改命令
- 粘贴命令 使用 p 命令可以将最后一次删除的内容粘贴到光标之后。(大写的 P 则是粘贴到光标之前)
**这里需要注意的是:**如果你需要粘贴的是整行为单位,那么 p 命令将在光标的下一行开始粘贴;如果你拷贝的是非整行的局部字符串,那么 p 命令将在光标后开始粘贴。
- 拷贝命令
其实我们用的最多的还是拷贝粘贴,VIM 用 y 命令实现拷贝。语法跟删除的 d 命令一样:d motion
其中的 motion 同样是用来表示操作范围的指令,即 yy 表示拷贝当前行,3yy 则表示拷贝 3 行;y$ 表示从光标所在的位置拷贝到行尾的所有字符;yG 则表示从光标所在行拷贝到文件末尾行的所有字符
拷贝完成之后同样使用 p 命令进行粘贴
- 替换命令
VIM 还提供了一个简单的替换命令:r 命令
r 用于替换光标所在的字符,做法是先将光标移动到需要替换的字符处,按一下 r 键,然后输入新的字符。注意,全程无需进入插入模式,也不会进入插入模式
- 替换模式
对于需要替换多个字符,更好的方案是直接进入替换模式。按下大写的 R 键,屏幕左下角出现 – REPLACE – 字样,说明你已经处于替换模式。此时输入字符可以连续替换光标及其后边的内容。
- 修改命令
修改跟替换是不一样的! 修改跟替换是不一样的!
修改会进入插入模式,替换不会进入插入模式! 修改会进入插入模式,替换不会进入插入模式!
修改命令我们使用 c 键来启动,格式是:c [number] motion
motion 依然表示范围,[数字]依然拥有奥义,同样是可选的,加上数字表示重复执行多次 motion 范围…

事实上,修改 == 删除 + 进入插入模式
# 文件信息、跳转、定位括号和缩进
有时候,你可能需要知道当前的文件信息,比如文件名,文件状态,文件的总行数,以及光标所在的相对位置
快捷键 ctrl + g 可以解决你的需求:

- 跳转
在 VIM 有两种方式可以将光标跳转到指定的位置:
- 行号 + G
- 行号
比如将光标跳转到第 333 行的位置,你就输入数字 333,再输入大写字母 G 即可见证奇迹;或者输入冒号(:)进入命令行模式,再输入数字 333,最后回车,也可以跳转到目的地
如果单独输入 G 键(前边没有输入数字),那么光标是直接去到文件的最后一行;如果输入两个小写 g,即 gg,则将光标跳转到文件的第一行。
- 定位括号
VIM 有个按键可以帮你快速定位到另一半括号,就是 % 键。将光标移动到 (),[],{},中的任何一半括号上,按下 % 键,便可看到此时光标已经跳转到另外一半的括号上了
- 缩进
在编写代码的时候我们经常需要对代码进行缩进,VIM 可以使用尖括号(< 或 >)来控制缩进,我们常用的就是两个同方向的尖括号表示将光标所在的语句进行缩进和反缩进操作。很明显 >> 表示缩进,而 << 则表示反缩进
不过行数一多……到底要缩进多少行就成了一个问题……这时,你可以按一下 v 进入可视模式(左下角出现 -- VISUAL -- 字样),然后通过 h、j、k、l 或 其他 motion 来移动你的光标,此时光标所到之处必被一道亮光所包围(表示被选中),选择好需要缩进的目标后,只需按一下 > 即可完成任务

# 搜索命令和替换命令
- 搜索命令

最后提个醒:在搜索命令中,.、*、[、]、^、%、/、?、~ 和 $ 这 10 个字符有着特殊意义,所以在使用这些字符的时候要在前面加上一个反斜杠(\),比如你要搜索问号,则输入 /\?
- 替换命令
搜索在很多情况下都是为了替换
通过搜索功能,我们将光标定位到目标位置,如果你确定这个目标是可恶的,需要被替换的,你可以输入 :s/old/new,这样即可将光标所在行的第一个 old 替换为 new;你如果输入的是 :s/old/new/g,则表示将光标所在行的所有 old 替换为 new。
输入 : %s/old/new/g 表示替换整个文件中每个匹配的字符串
输入 : %s/old/new/gc 替换提示信息
输入 : 5,13s/old/new/g 替换第 5 行到第 13 行之间的所有 XX
# 执行shell命令、文件另存为、合并文件和打开多个文件
- 执行shell命令
想知道当前 / 下边有哪些目录和文件,在 VIM 中你可以输入 :!ls
在输入冒号(:)进入命令行模式,输入感叹号(!),在其后便可以加上 shell 命令。此后 VIM 将临时跳转回 shell,并执行命令。再次按下 Enter 键回到 VIM
- 文件另存为
输入 :w 新文件名 文件另存为
如:输入 :w test2 该命令会以 test2 为文件名拷贝保存整个 test 文件
- 局部内容另存为
言下之意就是,VIM 可以将文件中的局部文本另存为一个新的文件