Vi 的使用
vi 是一个强大的文本编译器。它可以通过不同模式的切换,使用户可以不用鼠标,通过键盘完成对所有文本的操控。
vi 的四种模式:
- 正常模式(Normal-model)
- 插入模式(Insert-model)
- 命令模式(Command-model)
- 可视模式(Visual-model)
命令行输入 vi
,会进入vim
文本编译器的版本,vim
是对 原始 vi
编译器的扩展。可以用命令 man vi
获取到相应的帮助。可以在终端输入 vim
进入其主界面。
vi
man vi
vim
vim 的正常模式
光标移动按键:
按键 | 含义 |
---|---|
l or 右箭头 | 向右移动一个字符 |
h or 左箭头 | 向 左 移动一个字符 |
j or 下箭头 | 向 下 移动一个字符 |
k or 上箭头 | 向 上 移动一个字符 |
0(零按键) | 移动到当前行的行首 |
$ | 移动到当前行的行尾 |
^ | 移动到当前行的第一个非空字符 |
w | 移动到下一个单词或标点符号的开头 |
W | 移动到下一个单词的开头(忽略标点符号) |
b | 移动到上一个单词或标点符号的开头 |
B | 移动到上一个单词的开头(忽略标点符号) |
Ctrl + f or Page Down | 向下翻一页 |
Ctrl + b or Page Up | 向上翻一页 |
numberG | 移动到第 number 行(例:1G 表示移动到文件的第一行) |
G | 移动到文件末尾 |
vi 中的许多命令都可以在前面加上一个数字,比如上面的 G
命令。在命令之前加上一个数字,就可以指定命令执行的次数。例:命令 5j
表示将光标下移 5 行。
复制、剪切和粘贴
y
命令用来复制文本,可以将 y
命令和各种光标移动命令结合起来使用:
命令 | 复制的内容 |
---|---|
yy | 当前行 |
5yy | 当前行及随后的四行文本(数字表示从当前行开始复制的行数) |
y0 | 从当前光标位置到 行首 |
y$ | 从当前光标位置到 行尾 |
y^ | 从当前光标位置到文本行的第一个非空字符 |
yW | 从当前光标位置到下一个单词的开头 |
yG | 从当前行到文件末尾 |
y20G | 从当前行到文件的第 20 行(数字可以根据自己需求设置) |
d
命令用来剪切文本,用法和 y
命令类似
p
命令用来粘贴文本。
- 小
p
命令把剪切板中的文本粘贴到光标位置之后 - 大
P
命令把剪切板中的文本粘贴到光标位置之前
删除文本
用 x
和 d
命令来删除字符。 x
按键会删除光标位置的一个字符。d 按键更通用一些。
命令 | 删除的文本 |
---|---|
x | 当前字符 |
3x | 当前字符及其后的两个字符 |
dd | 当前行 |
5dd | 当前行及随后的四行文本 |
d0 | 从光标位置开始到当前行的行首 |
d$ | 从光标位置开始到当前行的行尾 |
d^ | 从光标位置开始到文本行的第一个非空字符 |
dW | 从光标位置开始到下一个单词的开头 |
dG | 从当前行到文件末尾 |
d20G | 从当前行到文件的第 20 行 |
撤销与重做
- 撤销(后退):
u
- 重做(前进):
Ctrl + r
vim 的插入模式
进入插入模式的几种方式:
命令 | 含义 |
---|---|
i | 进入插入模式,光标位置不变 |
I | 进入插入模式,光标来到原来光标所在行的开头位置 |
a | 进入插入模式,光标来到原来光标的下一位置 |
A | 进入插入模式,光标来到原来光标所在行的结尾位置 |
o | 进入插入模式,光标来到原来光标位置的下一行,原来下面的行依次下移 |
O | 进入插入模式,光标来到原来光标位置的上一行,原来下面的行依次下移 |
按 Esc
键退出插入模式。
vim 的命令模式
保存与退出
-
保存:
:w <文件名>
。例::w /home/a.txt
-
退出:
- 退出:
:q
- 保存并退出:
:wq
- 不保存退出:
:q!
- 退出:
执行 Linux 命令
在文本编辑的同时,想临时执行 linux 命令,可执行代码::! <命令>
。例:查看 IP 地址::!ifconfig
查找与替换
-
查找
- 查找一行:
f
。例:fa
表示在当前行查找字符a
- 查找整个文件:
/
。 例:/a
表示在全文查找字符a
。如果查到的字符有多个,可以按n
来查找下一个匹配的字符;shift + n
用来查找上一个匹配的字符。
- 查找一行:
-
替换
命令:
:%s/<被替换字符>/<替换成字符>/gc
。对该命令的分解如下:条目 含义 : 冒号字符运行一个 ex 命令 % 指定要操作的行数。%是一个快捷方式,表示从第一行到最后一行。1,5 表示从第一个行到第五行,如果省略文本行的范围,那么操作只对当前行生效。 s 指定命令,这里是:替换(查找与替换) /<被替换字符>/<替换成字符> 查找类型与替换文本 g 全局。对文本行中所有匹配的字符串执行查找和替换操作。如果省略 g,则只替换每个文本行中第一个匹配的字符串 c 替换确认。在执行每个替换命令之前,vi 会停下来,通过信息(replace with <替换文本> (y/n/a/q/l/E/Y)?)来要求我们确认这个替换 例:
:s/x/a
:表示对光标所在行,把x
替换成a
:%s/x/a
: 表示对全文,把x
替换成a
:3,5s/x/a
:表示对第 3 到 5 行,把x
替换成a
:s/x/a/g
:表示对全局,把x
替换成a
替换确认按键如下:
按键 行为 y 执行替换操作 n 跳过当前匹配的实例 a 对当前及随后所有匹配的字符串执行替换操作 q or Esc 退出替换操作 l 执行这次替换并退出 Ctrl+e, Ctrl+y 分别是向下滚动和向上滚动。用于查看建议替换的上下文
显示行号
-
显示行号:
:set nu
-
取消显示行号:
:set nonu
上述命令只能对单次修改生效,当退出再次打开时,恢复原来状态。如果想长期生效,需要修改 vim 的配置文件。
- 打开 vim 配置文件。执行命令
vim /etc/vimrc
- 把
set nu
写入到配置文件最后一行,并保存。
- 打开 vim 配置文件。执行命令
vim 的可视模式
可视模式主要是用于对重复的大量操作,可以一次性执行完成的一种功能。进入可视模式的三种方式:
命令 | 行为 |
---|---|
v | 字符可视模式 |
V | 行可视模式 |
Ctrl+v | 块可视模式(配合 d 和I 命令可以进行块的便捷操作) |
I
在当前块的前面插入内容。
d
删除当前的块。