一、vim 介绍
vim 是 vi 的扩展,是一个功能丰富的文本编辑器,对于一个运维人员的必备基础技能之一,就是熟练使用 vim/vi 编辑器。在最小化安装环境一般只有 vi,没有 vim,需要手动安装一下。
yum install -y vim
二、vim 模式

1、普通模式
默认的编辑模式。从 shell 窗口打开文件进入的第一个模式,其他模式可以通过按 ESC 键回退到普通模式。

2、命令模式
用于执行复杂查询命令,从普通模式输入“:”,“/”或“?”等符号即可进入命令模式,回车键表示输入完成

3、插入模式
该模式就类似 window 中操作文本文件,普通模式下可通过输入“i”,“o”等字符即可进入插入模式。编辑完成后按 ESC 键退出到普通模式。

4、可视模式
用于选定文本块;可以在正常模式下输入“v”(小写)来按字符选定,输入“V”(大写)来按行选定,或输入“Ctrl-V”来按方块选定。

三、每个模式的常用操作
1、vim 打开文件方法
| 选项 | 说明 |
|---|---|
| vim filename | 正常打开vim文件 |
| vim + filename | 打开文件,并将光标置于最后一行 |
| vim +n filename | 打开文件,并将光标置于第n行 |
| vim +/ssh passwd | 打开文件,并将光标置于第一个与ssh匹配的位置 |
| vim -r filename | 恢复上次vim打开时崩溃的文件 |
2、普通模式
| 操作 | 说明 |
|---|---|
| G | 跳到最后一行 |
| gg | 跳到第一行 |
| 5G | 跳到第5行 |
| yy | 复制当前行 |
| 5yy | 复制从当前行往后的5行 |
| p | 粘贴已复制的行到光标后 |
| P | 粘贴已复制的行到光标前 |
| dd | (1)剪切当前行,以p粘贴;(2)删除当前行 |
| 5dd | 删除5行 |
| dG | 从当前行删到最后一行 |
| D | 从光标处删除到行尾 |
| 5dG | 从当前行删到第五行 |
| x | 删除光标所在位置的字符 |
| 5x | 删除光标所在位置的字符及往后的5个字符 |
| X | 删除光标所在位置的前一个字符 |
| u | 撤销之前的操作 |
| Ctrl + r | 反撤销(恢复撤销) |
| 数字0或者^ | 将光标移动到当前行的行首 |
| $ | 将光标移动到当前行的行尾 |
| ctrl +f | 向下翻页 |
| ctrl +b | 向上翻页 |
| n | 查找下一个相同的字符 |
| N | 查找上一个相同的字符 |
| r | 替换光标所在位置的字符 |
| R | 从光标当前位置开始替换字符,输入内容会覆盖后面等长的内容,按“Esc”结束输入 |
| h | 向左移动光标 |
| j | 向下移动光标 |
| k | 向上移动光标 |
| l | 向右移动光标 |
3、命令模式常用命令
| 操作 | 说明 |
|---|---|
| :wq | 保存退出 |
| :wq! | 强制保存退出 |
| :q | 不保存退出 |
| :q! | 强制退出,一般已经对文件内容已经进行了修改,不保存强制退出的情况使用 |
| :set nu | 设置行号显示 |
| :set nonu | 取消行号 |
| :set list | 取消行号 |
| set paste | 启用粘贴模式 |
| set nopaste | 关闭粘贴模式 |
| :s/a/b/g | 将当前光标所在行中所有a替换成b |
| :2,5s/a/b/g | 将2-5行中所有a替换成b |
| :%s/a/b/g | 将文件所有的a替换成b |
| /word | 从文本查找字符串,按“n”可以查看下一个相同字符 .注意:查找会区分大小写 |
| /^word | 查询以work开头的行 |
| /work$ | 查询以work结尾 |
| ?work | 从文本查找字符串,按“n”可以查看上一个相同字符 |
4、进入插入模式方法
| 操作 | 说明 |
|---|---|
| i | 光标所在位置插入 |
| I | 光标所在位置行首插入 |
| o | 光标所在位置下一行插入 |
| O | 光标所在位置上一行插入 |
| a | 光标所在位置下一个字符的位置插入 |
| A | 光标所在位置行尾插 |
进入到插入模式后就如同进入一个文档文件,按ESC键退出到普通模式
5、可视化模式常用操作
普通模式进入可视化模式
| 操作 | 命令 |
|---|---|
| v | 字符选择模式,选中光标经过的所有字符 |
| V | 行选择模式,选择光标经过的所有行 |
可视化模式可以实现批量的删除增加注释,生产环境经常使用
四、vim 可能遇到的问题

出现上面的情况有两种可能:
1、重复编辑,在另外一个远端也有打开这个文件
2、异常断开,在正在编辑时突然关机或网络断开的情况
vim 他不是实时写入的机制,他会先把文件写到内存,等我们执行 w 操作以后,再写回到原文件。那么在写回原文件,或者执行 q 的放弃操作之前,会生成一个临时的文件,以 . 开头,以 .swp 结尾。
解决办法:
直接删除自动生成的临时文件file.swp或者报错界面直接输入D放弃编辑
rm -f .filename.swp
