在使用Linux操作系统的过程中,对于文本的编辑是不可避免的,vi文本编辑器作为Linux默认的编辑器,掌握其基本操作尤为重要。
1 三种工作模式
vi编辑器有3种工作模式,即命令行模式、编辑模式和底行模式。
1.1 命令行模式
通过vi
命令打开文件时,默认进入命令行模式。在该模式下,用户可以输入各种合法命令,此时输入的各种字符,都会当作命令来解析。
1.2 编辑模式
在命令行模式下,可以通过指定命令(如a
、i
、o
等)切换到编辑模式。在该模式下,用户输入的各种字符,都会显示到文本内容上。
1.3 底行模式
底行模式又称转义模式,在命令行模式下,可以通过指定命令(如:
、/
、?
等)切换到底行模式。在此模式下,用户可以输入一些文件管理命令,命令执行完后自动进入命令行模式。
1.4 三种工作模式的切换
命令行模式下输入a
、i
、o
或O
命令进入编辑模式。
命令行模式下输入:
、/
或?
命令进入底行模式。
编辑模式或底行模式下,按ESC
可回到命令行模式。
编辑模式和底行模式之间无法直接进行切换。
2 基本操作
2.1 进入vi
在系统提示符后输入vi
及文件名称后,就可以进入vi全屏编辑画面。
# 命令语法
vi [选项] 文件名
选项值 | 说明 |
---|---|
-r | 恢复上次打开时崩溃的文件 |
-R | 用只读方式打开文件 |
+ | 打开文件并把光标置于最后一行首部 |
+n | 打开文件并把光标置于第 n 行首部 |
+/pattern | 打开文件并把光标置于第一个与 pattern 匹配的行首部 |
-c command | 打开文件后执行 command 命令(vi编辑器中的命令) |
2.2 编辑文本
前文提到命令行模式下输入a
、i
、o
或O
命令可进入编辑模式,其具体说明如下:
输入字符 | 说明 |
---|---|
i | 在光标前输入文本 |
a | 在光标后输入文本 |
o | 在当前行下面新开一行 |
O | 在当前行上面新开一行 |
2.3 保存退出
如果文本已经编辑完成,这时就需要保存或退出,在命令行模式下键入下列命令,即可完成保存或退出操作。
输入字符 | 说明 |
---|---|
:wq | 存盘并退出,即使文件没有修改也强制写入,并更新修改时间 |
:wq! | 强制存盘并退出,功能与:wq 类似,对于只读文件,使用该命令忽略只读强制写入 |
:x | 保存并退出,仅当文件修改时才写入,并更新修改时间 |
:x! | 强制保存并退出,功能与:x 类似,对于只读文件,使用该命令忽略只读强制写入 |
:q | 退出,如有修改,会进行确认 |
:q! | 强制不保存退出 |
2.4 翻屏查看
当文本内容超过一个屏幕时,我们不可避免的需要翻屏查看屏幕外的内容,vi编辑器提供了以下操作在命令行模式下进行翻屏操作:
输入字符 | 说明 |
---|---|
Ctrl+u | 相对于当前屏幕,向文件首翻半屏 |
Ctrl+d | 相对于当前屏幕,向文件尾翻半屏 |
Ctrl+b | 相对于当前屏幕,向文件首翻一屏 |
Ctrl+f | 相对于当前屏幕,向文件尾翻一屏 |
nz+Enter | 将第 n 行滚至屏幕顶部,如不指定 n 值,则为当前行 |
2.5 移动光标
vi编辑器可以使用方向键移动光标,但是正规的vi编辑器是在命令行模式下使用小写英文字母控制光标移动的,命令行模式下常用光标移动操作如下:
输入字符 | 说明 |
---|---|
h | 光标左移一个字符 |
j | 光标下移一个字符 |
k | 光标上移一个字符 |
l | 光标右移一个字符 |
nh | 光标左移 n 个字符 |
nj | 光标下移 n 个字符 |
nk | 光标上移 n 个字符 |
nl | 光标右移 n 个字符 |
w 或W | 光标右移到下个字字首 |
b 或B | 光标左移到上个字字首 |
e 或E | 光标右移到下个字字尾 |
nG | 光标移动到第 n 行首部 |
n+ | 光标下移 n 行 |
n- | 光标上移 n 行 |
n$ | 以当前行作为第1行,光标移动到对应第 n 行行尾 |
H | 光标移至当前屏幕顶行 |
M | 光标移至当前屏幕中行 |
L | 光标移至当前屏幕底行 |
0 | 光标移至当前行行首 |
$ | 光标移至当前行行尾 |
:$ | 光标移至文件最后一行行首 |
2.6 删除文本
传统的文本删除是在编辑模式下使用Backspace
或Delete
键,vi编辑器也提供了许多在命令行模式下的删除命令,常用命令如下:
输入字符 | 说明 |
---|---|
x | 删除光标所在位置的字符 |
X | 删除光标所在位置前面的字符 |
dd | 删除光标所在行 |
D 或d$ | 删除从光标所在位置到当前行尾的内容(包括光标位置字符) |
d0 | 删除从光标所在位置到当前行首的内容(包括光标位置字符) |
ndd | 删除从当前行开始的 n 行 |
2.7 选中复制粘贴
复制是提高编辑效率的一大利器,在vi编辑器中,提供了命令行模式下的诸多复制命令,具体如下:
输入字符 | 说明 |
---|---|
v | 进入可视模式,从光标位置移动选中内容,按y 完成复制(按d 为删除) |
V | 进入可视行模式,从光标所在行移动选中完整行,按y 完成复制(按d 为删除) |
Ctrl+v | 进入可视块模式,从光标所在位置垂直选中块内容,按y 完成复制(按d 为删除) |
yy | 复制光标所在行 |
Y 或y$ | 复制从光标所在位置到当前行尾的内容(包括光标位置字符) |
y0 | 复制从光标所在位置到当前行首的内容(包括光标位置字符) |
nyy | 复制从当前行开始的 n 行 |
p | 粘贴当前复制的内容 |
2.8 搜索替换
搜索与替换功能在生产中使用非常普遍,vi编辑器也提供了许多搜索与替换相关的命令:
输入字符 | 说明 |
---|---|
/pattern | 向文尾方向查找与 pattern 匹配的内容,按n 查找下一个,按N 查找上一个 |
?pattern | 向文首方向查找与 pattern 匹配的内容,按n 查找下一个,按N 查找上一个 |
* | 向文尾方向查找当前光标所在位置单词,按n 查找下一个,按N 查找上一个 |
# | 向文首方向查找当前光标所在位置单词,按n 查找下一个,按N 查找上一个 |
:s/s1/s2/g | 将光标所在行中的 s1 替换为 s2 (全部替换) |
:n1,n2s/s1/s2/g | 将 n1 至 n2 行(包含 n1 和 n2 )中的 s1 替换为 s2 (全部替换) |
:%s/s1/s2/g | 将所有行中的 s1 替换为 s2 (全部替换) |
:set nu | 显示行号 |
:set nonu | 隐藏行号 |
:noh | 在vim编辑器中,查找到指定内容会高亮显示,使用此命令可以取消高亮 |
2.9 重复撤销
在使用vi编辑文本时,可能存在误操作等想要将文件恢复到修改前,或者需要重复上一步操作,vi编辑器提供了命令行模式下的如下重复与撤销命令:
输入字符 | 说明 |
---|---|
. | 重复执行上次操作 |
u | 撤销上次命令 |
Ctrl+r | 恢复撤销的命令 |
>> | 向右增加缩进 |
<< | 向左减少缩进 |