环境:CentOS7
说明:文中vi命令前带分号":"的表示":"后面的命令是在命令行模式执行;否则均为普通模式命令。
一、vi和vim
● vi和vim都是linux下的文本编辑器。
● vim是vi的升级版。
● vi系统内置,vim需要另外安装。
二、安装vim
yum -y install vim-enhanced
三、运行vi/vim编辑器
● 在没有安装vim的的情况下使用vi命令运行:
vi 新建
或
vi 文件名 新建/打开指定文件
● 安装vim后,使用vi和vim都可以运行。
四、工作模式
常用的有3种:普通模式、插入模式、命令行模式。掌握了这3种模式的基本操作,vim就算是入门了。
普通模式:
● 启动vi 或 任何模式下按 Esc 即可进入到普通模式
● 输入的任何字符都被vi当作命令执行
● 输入的命令不会在屏幕上显示出来
● 输入的字符不是vi的合法命令,vi会响铃报警
插入模式:
● 普通模式按键 i(插入) / a(追加) / o(打开) / c(修改) / r(取代) / s(替换) 都会进入插入模式(编辑模式)
● 该模式下,用户输入的任何字符都被当作文件内容保存起来
命令行模式:
● 普通模式按 : (也就是 ctrl + ; )进入命令行模式
● 用于执行一些复杂的命令
● 命令执行完后,vi自动返回到普通模式
可视模式:
● 用于文本选择
● 按v进入可视模式,移动光标可以选择文本
● 按V(shift + v)进入可视行模式, 整行整行的选中
● 按ctrl+v进入可视块模式,以块方式选择文本
替换模式:
● R(shift + r)进入替换模式
● 该模式下,输入的字符都会替换当前光标下的字符
注1:在任何模式状态下按ESC即可返回(进入)到普通模式。
注2:工作模式的名称有些文章中叫法不同,但一看名称就知道其指的是何种工作模式。如:普通模式(命令模式)、插入模式(编辑模式)、命令行模式(末行模式、底行模式)...
五、打开文件、保存文件、退出vi/vim编辑器
打开文件
新建 | vi |
打开指定文件 | vi 文件名 |
以只读的方式打开文件,可以强制保存 | vi -R 文件名 |
以只读的方式打开文件,不可以强制保存 | vi -M 文件名 |
打开多个文件 | vi -o或-O 文件名 文件名(显示方式:-o 垂直并排显示,-O 水平并排显示) |
保存文件
保存 | :w |
文件另存为 | :w 文件名 |
文件另存为覆盖已存在的文件 | :w! 文件名 |
退出
退出 | :q |
保存退出 | :wq 或 :x (普通模式 shift + zz) |
不保存退出 | :q! |
文件全部退出在原命令下加a | 如: :qa! :wqa |
六、常用操作
方向键
h / j / k / l 或 键盘←↑↓→
进入插入模式
i / a / o / s 或 大写字母
删除(剪切)
[n]x 或 Del | 删除(剪切)光标右边n个字符,相当于d[n]l |
d[n]w | 删除(剪切)1(n)个单词 |
d[n]l | 删除(剪切)光标右边1(n)个字符 |
d[n]h | 删除(剪切)光标左边1(n)个字符 |
d^ 或 d0 | 删除(剪切)当前位置到行首的内容 |
d$ | 删除(剪切)当前位置到行尾的内容 |
[n]dd | 删除(剪切)1(n)行 |
复制
y | 复制可视模式下选择的文本 |
y[n]w | 复制1(n)个词 |
y[n]l | 复制光标右边1(n)个字符 |
y[n]h | 复制光标左边1(n)个字符 |
[n]yy | 复制从光标处开始1(n)行内容 |
粘贴
p | 粘贴到光标所在之前(行前) |
P(shift + p) | 粘贴到光标所在之后(行后) |
撤销及恢复撤销
u | 撤销最后一次修改 |
U(shift + u) | 撤销对整行的修改 |
ctrl + r | 恢复撤消的内容 |
多文件切换
ctrl + ww | 将光标切换到下一个文个件 |
ctrl + w + 上下方向 | 垂直并排的文件 |
ctrl + w + 左右方向 | 水平并排的文件 |
其它
r | 单字符替换 |
行号 + G(shift + g) | 跳转到行号(:行号) |
% | 定位行中的括号(另一半括号) |
ctrl + g | 查看当前的文件信息 |
:r 文件名 | 合并文件(把文件合并到当前文件光标所在行的下一行位置) |
>>(shift + ..) | 缩进 |
<<(shift + ,,) | 反向缩进 |
查找
shift + * | 让光标停留在想要查找的单词的任意一个字母上面,然后按shift + *,即可快速选中该单词。并且可以通过 n 或 N 进行上一个或下一个的匹配。 |
:/1118pc.com | 在后面的文本中查找1118pc.com |
:?1118pc.com | 在前面的文本中查找1118pc.com |
使用了查找命令之后,使用以下两个键继续查找:
n 按照同一方向继续查找
N 按照反方向查找
更多查找操作:
://^1118pc.com | 查找^1118pc.com字符串。 /为特殊字符转义(. * [ ] ^ % / ? ~ $) |
:/^1118pc.com | 查找以1118pc.com开始的行 |
:/1118pc.com$ | 查找以1118pc.com结束的行 |
替换
:s/old/new | 将光标所在行的第一个old替换为new |
:s/old/new/g | 将光标所在行的所有old替换为new |
:n1,n2s/old/new/g | 将n1行到n2行所有的old替换为new |
:%s/old/new/g | 将文件中所有有old替换为new |
:%s/^/xxx/g | 在每一行的行首插入xxx,^表示行首 |
:%s/$/xxx/g | 在每一行的行尾插入xxx,$表示行尾 |
所有替换命令末尾加上c,每个替换都将需要用户确认。 加上i则忽略大小写(ignore)。
如:
:s/old/new/c
:%s/old/new/gc
:%s/old/new/gci