1. vim编辑器介绍
vim
编辑器是vi编辑器的加强版本。vim不仅兼容vi的所有的命令和语法,而且还可以内容文本进行高亮显示,对配置文件和程序类的文件极度友好。一些Linux系统发行版默认没有安装vim编辑器,需要进行手动安装。安装命令如下:
yum install -y vim
使用语法:
vim filename # 即vim命令跟上文件名进行文件内容编辑
如果没有在对应目录下找到文件,则会新建一个同文件名的文件进入。
2. 模式介绍
vim有三种基本操作模式,它们是vim高效且独特编辑方式的核心。以下是这三种模式的详细介绍:
- 正常模式(Normal mode)
vim命令打开文件之后,默认的状态就是正常模式。
该模式下不能进行文字编辑,但是可以通过“上下左右”键来移动光标,也可以执行一些操作命令进行如删除、复制、粘贴等工作。
- 插入模式(Insert mode)
在正常模式下,只有通过按下
i
、a
、o
等字母进入插入模式后才可以进行文本编辑操作。
在确定文件是否处于插入模式状态有一个重要的特征,就是在窗口左下角要有插入的标记-- INSERT --
或-- 插入 --
。
- 命令模式(Command mode)
命令模式经常与正常模式混为一谈,但技术上这是正常模式下的一种特殊状态。
在正常模式下,输入:
或/
或?
时,光标会自动定位到视图的底行,用于执行保存文件、查找替换文本、退出vim等操作。输入完命令后按回车执行,之后自动返回到正常模式。
- 三种模式的工作示意图
除了这三种主要模式外,vim还有可视模式(Visual mode),通过按下v、V或Ctrl + v进入,允许您选择文本区域进行复制、剪切等操作,之后的操作会应用于选中区域。
3. 指令介绍
3.1 正常模式切换插入模式
切换按键 | 命令解释 |
---|---|
i | 在当前光标所在处插入文字(最为常用) |
I | 在当前所在行的行首第一个非空格符处开始插入文字,和A相反 |
a | 在当前光标所在的下一个字符处插入文字 |
A | 在当前所在行的行尾最后一个字符处开始插入文字,和I相反 |
o | 在当前所在行的下一行处插入新的一行 |
O | 在当前所在行的上一行处插入新的一行 |
Esc | 退出插入模式,回到正常模式中 |
3.2 vi/vim常用命令说明
- 【正常模式】:移动光标操作
命令 | 说明 |
---|---|
G | 将光标移动到文件的最后一行 |
gg | 将光标移动到文件的第一行,等于1gg或1G |
ngg | n为数字,移动到文件的第n行。比如,12gg就是移动到第12行。可以配合命令“:set nu ”查看。 |
0、^、【Home】 | 数字0,将光标从所在位置移动到当前行的开头 |
$、【End】 | 从光标所在位置将光标移动到当前行的结尾 |
n | n为数字,输入后按回车键。将光标从当前位置向下移动 n 行。 |
H | 将光标移动到当前窗口的最上方的那一行 |
M | 将光标移动到当前窗口中间的那一行 |
L | 将光标移动到当前窗口最下方的那一行 |
- 【正常模式】:搜索操作
命令 | 说明 |
---|---|
/字符串 | 从光标位置开始,向下寻找符合的字符串。 |
?字符串 | 从光标位置开始,向上寻找符合的字符串。 |
n | 从光标位置开始,继续执行一步前一个操作。使用 N 则反向执行 |
这几个符号通常配合使用。这里的 n 表示按键。
- 【正常模式】:替换操作
命令 | 说明 |
---|---|
:%s/A/B/g | 把文件内所有符合A的内容全部替换成B。/表示分隔符,也可以使用#、@代替。 比如, :%s/old/new/g 就表示将全文的old 替换为new 。 |
:n1,n2s/A/B/g | n1和n2表示数字在第n1行与n2行之间查找到A,替换成B。 比如, :4,6s/old/new/g 就表示将第四行到第六行的old 替换为new 。 |
这里s表示替换,g表示全局。
- 【正常模式】:选择操作
命令 | 说明 |
---|---|
v | 从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束。 |
V | 从光标当前行开始,光标经过的行都会被选中,再按一下V结束。 |
ggVG | 选中全部的文本, 其中gg为跳到行首,V选中整行,G末尾 |
- 【正常模式】:复制、粘贴操作
命令 | 说明 |
---|---|
yy | 复制光标当前所在行 |
nyy | n为数字,复制从光标所在行开始向下的n行 |
p | 将已复制的内容粘贴在当前光标所在行的下一行 ,P复制到上一行 |
- 【正常模式】:回滚、删除操作
命令 | 说明 |
---|---|
u | 恢复前一个执行的动作(回滚) |
. | 重复执行前一个执行的动作 |
dd | 删除光标所在的当前行 |
ndd | n为数字,删除从光标所在行开始向下的n行 |
dG | 删除从光标所在行到文件的末尾行 |
dgg | 删除从光标所在行到文件的首行 |
d$ | 删除光标所在位置到行尾 |
d^、d0 | 删除光标所在位置到行首 |
x | 删除光标所在处字符,即向后删除一个。X表示向前删除一位 |
ctrl+v
选中内容,按下x
删除:对行内的选中内容进行删除
shift+v
选中内容,按下x
删除:删除选中的行(删除的是整行)
- 【命令模式】操作
命令 | 说明 |
---|---|
:wq | 退出并保存 |
:wq! | 强制退出并保存 |
:q! | 强制退出,不保存 |
:set nu | 显示行号 |
:set nonu | 取消行号显示 |
4. 故障说明
- vim编辑文件的流程
vim filename
编辑文件会在当前的目录产生一个隐藏文件名称为.filename.swp
;- 如果正常编辑正常退出保存则系统会将
.filename.swp
移动为filename
;- 如果不正常退出则会保留
.filename.swp
文件,文件中存放着我们修改过的内容;
- 解决故障方法
- 如果想要保留修改过的内容。先使用
vim -r filename
回车,进到文件中保存并且退出;再删除.filename.swp
文件,rm -f .filename.swp
;- 如果不想保留要修改过的内容,则直接册除
.filename.swp
文件。
- 导致此故障的原因可能是
- 没有正确的保存退出
- 直接关闭了远程连接窗口
- 网络中断,导致和服务器中断连接
- 多个窗口(连接)同时编辑一个文件