带有命令的 Vi 编辑器

17 Mar 2025 | 6 分钟阅读

什么是 vi

vi 编辑器被阐释为 **vi**sual 编辑器。它安装在每个 Unix 系统中。换句话说,它在所有 Linux 发行版中都可用。它用户友好,并且在不同的发行版和平台上工作方式相同。它是一个非常强大的应用程序。vi 编辑器的一个改进版本是 **vim**。

vi 编辑器有两种模式

  • 命令模式:在命令模式下,对文件执行操作。vi 编辑器以命令模式启动。在这里,输入的单词将作为 vi 编辑器中的命令。要传递命令,您需要处于命令模式。
  • 插入模式:在插入模式下,输入的文本将被插入到文件中。**Esc** 键将使您从插入模式切换到命令模式。

默认情况下,vi 编辑器以命令模式启动。要输入文本,您需要处于插入模式,只需键入 **'i'**,您就会进入插入模式。虽然,在键入 **i** 后屏幕上不会显示任何内容,但您将处于插入模式。现在您可以键入任何内容。

要退出插入模式,请按 **Esc** 键,您将被导向命令模式。

如果您不确定您处于哪种模式,请按两次 Esc 键,您将处于命令模式。


使用 vi

vi 编辑器工具是一个交互式工具,因为它会在您编辑文件时在屏幕上显示对文件的更改。

在 vi 编辑器中,您可以插入、编辑或删除光标在文件中移动时遇到的单词。

命令为每个功能指定,例如删除是 x 或 dd。

vi 编辑器区分大小写。例如,**p** 允许您在当前行之后粘贴,而 **P** 允许您在当前行之前粘贴。

vi 语法

在终端中,当您键入带有文件名(例如 vi 命令)时,终端会清屏,并显示文件的内容。如果不存在这样的文件,则会创建一个新文件,完成后文件将以指定的文件名保存。


Linux vi 示例

让我们通过一个例子来理解 vi

要启动 vi,请打开您的终端并键入 vi 命令,后跟文件名。如果您的文件在其他目录中,您可以指定文件路径。如果您的文件不存在,它将在指定位置创建一个具有指定名称的新文件。

示例

Linux Vi Editor1

查看上面的快照,我们正在创建一个新文件 **file.txt**(因为此文件不存在),并已为目录 **Downloads** 指定了完整路径。

命令模式

这是您在执行上述命令后按 Enter 键后看到的内容。如果您开始键入,什么都不会出现,因为您处于命令模式。默认情况下,vi 以命令模式打开。

Linux Vi Editor1

查看上面的快照,它是空白的,因为这是一个新文件。要开始键入,您需要切换到插入模式。在终端窗口的底部,会显示目录名和文件名。

插入模式

要切换到插入模式,请按 **i**。虽然,还有其他命令也可以切换到插入模式,我们将在下一页学习。

Linux Vi Editor3

查看上面的快照,在按 **i** 后,我们已进入插入模式。现在我们可以写任何内容。要移到下一行,请按 Enter。

完成打字后,按 **esc** 键返回命令模式。


保存并退出

您可以从命令模式保存并退出 vi 编辑器。在输入保存或退出命令之前,您必须先按冒号 **(:)**。冒号允许您向 vi 发出指令。

退出 vi 表

命令操作
:wq保存并退出
:w保存
:q退出
:w fname另存为 fname
ZZ保存并退出
:q!放弃更改并退出
:w!保存(并写入不可写文件)

要退出 vi,首先确保您处于命令模式。现在,键入 :wq 并按 Enter。它将保存并退出 vi。

键入 **:wq** 以保存并退出文件。

Linux Vi Editor4

查看上面的快照,命令 :wq 将保存并退出 vi 编辑器。当您在命令模式下键入它时,它会自动出现在左下角。

如果您想在不保存文件的情况下退出,请使用 **:q**。此命令仅在您未对文件进行任何更改时才有效。

Linux Vi Editor5

查看上面的快照,此文件已被修改,因此在键入 **:q** 时,它会在左下角显示此消息。

可以通过命令 **:!q.** 保存上述文件。它会丢弃对文件所做的更改并保存。

Linux Vi Editor6

查看上面的快照,我们键入了 **:!q,**,它将通过丢弃所做的更改来保存我们的文件。


Vi 命令

Linux vi 编辑器与其他编辑器不同。您必须使用不同的按键来使用不同的功能。尽管如此,使用 vi 编辑器还是相当容易和有趣的。

vi 命令区分大小写。

请查看下表中的 vi 命令。

从命令模式切换到插入模式

命令操作
i在当前字符前开始键入
I在当前行的开头开始键入
a在当前字符后开始键入
A在当前行的末尾开始键入
o在当前行的下一行开始键入
O在当前行的上一行开始键入

在文件中移动

命令操作
j向下移动
k向上移动
h向左移动
l向右移动

跳转行

命令操作
G将您带到文件的最后一行
``将您带到文件中的上一个位置

删除

命令操作
x删除当前字符
X删除光标前的字符
r替换当前字符
xp交换两个字符
dd删除当前行
D从当前字符删除到行尾
dG从当前行删除到文件末尾

重复和撤销

命令操作
u撤销上一个命令
.重复上一个命令

剪切、复制和粘贴命令

命令操作
dd删除一行
yy(yank yank) 复制一行
p在当前行后粘贴
P在当前行前粘贴

剪切、复制和粘贴块的命令

命令操作
<n>dd删除指定的 n 行
<n>yy复制指定的 n 行

行的开始和结束

命令操作
θ移至当前行的开头
^移至当前行的开头
$移至当前行的末尾
删除到行首
d$删除到行尾

连接行

命令操作
J连接两行
yyp重复当前行
ddp交换两行

向前或向后移动

命令操作
w向前移动一个单词
b向后移动一个单词
<n>w向前移动指定数量的单词
dw删除一个单词
yw复制一个单词
<n>dw删除指定数量的单词

搜索字符串

命令操作
/string向前搜索给定字符串
?string向后搜索给定字符串
/^string向前搜索行首的字符串
/string$向前搜索行尾的字符串
n转到搜索字符串的下一个匹配项
/\<he\>搜索单词 he(而不是 there, here 等)
/pl[abc]ce搜索 place, plbce, 和 plcce

全部替换

语法

示例

命令操作
:1,$ s/readable/changed/从第一行到最后一行,正向替换为反向
:3,6 s/letters/neww/g从第三行到第九行,正向替换为反向

文本缓冲区

命令操作
"add删除当前行并将文本放入缓冲区 a
"ap粘贴缓冲区 a 中的行

缩写

语法

示例

命令操作
:ab au 缩写和取消缩写将 au 缩写为“abbreviation and unabbreviation”
:una au
取消 au 的缩写

Vi 编辑器索引



下一主题Linux vi 切换