Unix/Linux - vi 编辑器教程


在本章中,我们将了解 vi 编辑器在 Unix 中的工作原理。在 Unix 中编辑文件的方法有很多种。使用面向屏幕的文本编辑器vi编辑文件是最好的方法之一。该编辑器使您能够在上下文中编辑文件中的其他行。

vi 编辑器的改进版本(称为VIM)现已推出。这里,VIM 代表Vi IM证明。

vi 通常被认为是 Unix 编辑器的事实上的标准,因为 -

  • 它通常适用于所有版本的 Unix 系统。

  • 它的实现在整体上非常相似。

  • 它需要很少的资源。

  • 它比edex等其他编辑器更加用户友好。

您可以使用vi编辑器编辑现有文件或从头开始创建新文件。您还可以使用此编辑器来读取文本文件。

启动 vi 编辑器

下表列出了使用 vi 编辑器的基本命令 -

先生。 命令与说明
1

vi 文件名

如果文件不存在则创建一个新文件,否则打开现有文件。

2

vi -R 文件名

以只读模式打开现有文件。

3

查看文件名

以只读模式打开现有文件。

以下是创建新文件testfile(如果当前工作目录中不存在)的示例-

$vi testfile

上面的命令将生成以下输出 -

|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]    

您会注意到光标后面的每一行都有一个波形符(~)。波形符代表未使用的行。如果一行不以波形符开头并且显示为空白,则表示存在空格、制表符、换行符或其他一些不可见字符。

您现在有一个打开的文件可以开始处理。在继续之前,让我们先了解一些重要的概念。

操作模式

在使用 vi 编辑器时,我们通常会遇到以下两种模式 -

  • 命令模式- 此模式使您能够执行管理任务,例如保存文件、执行命令、移动光标、剪切(拉动)和粘贴行或单词,以及查找和替换。在此模式下,您键入的任何内容都将被解释为命令。

  • 插入模式- 此模式使您可以将文本插入文件中。在此模式下键入的所有内容都将被解释为输入并放置在文件中。

vi 始终以命令模式启动。要输入文本,您必须处于插入模式,只需键入i即可。要退出插入模式,请按Esc键,这将带您返回命令模式。

提示- 如果您不确定自己处于哪种模式,请按 Esc 键两次;这将带您进入命令模式。您使用 vi 编辑器打开文件。首先输入一些字符,然后进入命令模式以了解其中的区别。

退出 vi

退出 vi 的命令是:q。进入命令模式后,键入冒号和“q”,然后按回车键。如果您的文件被以任何方式修改,编辑器会警告您,并且不会让您退出。要忽略此消息,退出 vi 而不保存的命令是:q! 。这使您可以退出 vi 而不保存任何更改。

保存编辑器内容的命令是:w。您可以将上述命令与 quit 命令结合使用,或使用:wq并返回。

保存更改并退出 vi 的最简单方法是使用 ZZ 命令。当您处于命令模式时,键入ZZZZ命令的工作方式与:wq命令相同。

如果您想指定/声明文件的任何特定名称,可以通过在:w之后指定它来实现。例如,如果您想将正在处理的文件保存为另一个名为filename2的文件名,您可以输入:w filename2并返回。

在文件内移动

要在文件中移动而不影响文本,您必须处于命令模式(按 Esc 两次)。下表列出了一些可用于一次移动一个字符的命令 -

先生。 命令与说明
1

k

将光标向上移动一行

2

j

将光标向下移动一行

3

H

将光标向左移动一个字符位置

4

将光标向右移动一个字符位置

在文件内移动需要考虑以下几点 -

  • vi 区分大小写。使用命令时需要注意大小写。

  • vi 中的大多数命令都可以以您希望操作发生的次数作为前缀。例如,2j将光标从光标位置向下移动两行。

在 vi 中还有许多其他方法可以在文件内移动。请记住,您必须处于命令模式(按 Esc 两次)。下表列出了一些用于移动文件的命令 -

先生。 命令与说明
1

0 或 |

将光标定位在行首

2

$

将光标定位在行尾

3

w

将光标定位到下一个单词

4

将光标定位到上一个单词

5

将光标定位到当前句子的开头

6

将光标定位到下一个句子的开头

7

移至空白分隔单词的末尾

8

{

向后移动一个段落

9

}

向前移动一个段落

10

[[

向后移动一个部分

11

]]

向前移动一个部分

12

n|

移动到当前行的第n列

13

1G

移动到文件的第一行

14

G

移动到文件的最后一行

15

ng

移动到文件的第n

16

:n

移动到文件的第n

17 号

足球俱乐部

向前移动到c

18

氟碳

移回c

19

H

移动到屏幕顶部

20

NH

移至屏幕顶部第n

21

中号

移动到屏幕中间

22

L

移至屏幕底部

23

nL

移至屏幕底部第n

24

:X

冒号后跟数字会将光标定位在x表示的行号上

控制命令

以下命令可以与控制键一起使用来执行下表中给出的功能 -

先生。 命令与说明
1

CTRL+d

向前移动 1/2 屏幕

2

CTRL+F

向前移动一整屏

3

CTRL+u

向后移动 1/2 屏幕

4

CTRL+b

向后移动一整屏

5

CTRL+e

将屏幕向上移动一行

6

CTRL+y

将屏幕向下移动一行

7

CTRL+u

将屏幕向上移动 1/2 页

8

CTRL+d

将屏幕向下移动 1/2 页

9

CTRL+b

将屏幕向上移动一页

10

CTRL+F

将屏幕向下移动一页

11

CTRL+I

重绘屏幕

编辑文件

要编辑文件,您需要处于插入模式。从命令模式进入插入模式有多种方法 -

先生。 命令与说明
1

在当前光标位置之前插入文本

2

在当前行的开头插入文本

3

A

在当前光标位置后插入文本

4

A

在当前行末尾插入文本

5

在光标位置下方创建一个用于文本输入的新行

6

在光标位置上方创建一个用于文本输入的新行

删除字符

以下是重要命令的列表,可用于删除打开文件中的字符和行 -

先生。 命令与说明
1

X

删除光标所在位置下的字符

2

X

删除光标所在位置之前的字符

3

数据中心

删除从当前光标位置到下一个单词

4

d^

删除从当前光标位置到行首的内容

5

d$

删除从当前光标位置到行尾的内容

6

D

删除从光标位置到当前行末尾

7

DD

删除光标所在行

如上所述,vi 中的大多数命令都可以以您希望操作发生的次数作为前缀。例如,2x删除光标所在位置下的两个字符,2dd删除光标所在的两行。

建议在继续操作之前先练习一下命令。

更改命令

您还可以更改 vi 中的字符、单词或行而不删除它们。以下是相关命令 -

先生。 命令与说明
1

抄送

删除该行的内容,使您处于插入模式。

2

连续波

将光标所在的单词从光标更改为单词末尾的小写w 。

3

r

替换光标下的字符。进入替换后vi返回命令模式。

4

覆盖从当前光标下的字符开始的多个字符。您必须使用Esc来停止覆盖。

5

s

将当前字符替换为您键入的字符。之后,您将处于插入模式。

6

S

删除光标所在的行并用新文本替换它。输入新文本后,vi 保持插入模式。

复制和粘贴命令

您可以从一个地方复制行或单词,然后使用以下命令将它们粘贴到另一个地方 -

先生。 命令与说明
1

yy

复制当前行。

2

yw

从小写 w 光标所在的字符开始复制当前单词,直到单词末尾。

3

p

将复制的文本放在光标后面。

4

将拉出的文本放在光标之前。

高级命令

有一些高级命令可以简化日常编辑并允许更有效地使用 vi -

先生。 命令与说明
1

J

将当前行与下一行连接起来。j 个命令连接多行。

2

<<

将当前行向左移动一位移位宽度。

3

>>

将当前行向右移动一位移位宽度。

4

切换光标下字符的大小写。

5

^G

同时按下 Ctrl 和 G 键可显示当前文件名和状态。

6

U

将当前行恢复到光标进入该行之前的状态。

7

这有助于撤消文件中所做的最后更改。再次输入“u”将重新进行更改。

8

J

将当前行与下一行连接起来。计数连接那么多行。

9

:F

显示文件中的当前位置(以% 表示)以及文件名、文件总数。

10

:f 文件名

将当前文件重命名为 filename。

11

:w 文件名

写入文件 filename。

12

:e 文件名

使用文件名打开另一个文件。

13

:cd 目录名

将当前工作目录更改为 dirname。

14

:e#

在两个打开的文件之间切换。

15

:n

如果您使用 vi 打开多个文件,请使用:n转到该系列中的下一个文件。

16

:p

如果您使用 vi 打开多个文件,请使用:p转到该系列中的上一个文件。

17 号

:N

如果您使用 vi 打开多个文件,请使用:N转到该系列中的上一个文件。

18

:r 文件

读取文件并将其插入到当前行之后。

19

:nr 文件

读取文件并将其插入到第n行之后。

单词和字符搜索

vi 编辑器有两种搜索:字符串字符。对于字符串搜索,/? 使用命令。当您启动这些命令时,刚刚键入的命令将显示在屏幕的最后一行,您可以在其中键入要查找的特定字符串。

这两个命令仅在搜索发生的方向上有所不同 -

  • /命令在文件中向前(向下)搜索。

  • 命令在文件中向后(向上)搜索。

n和N命令分别以相同或相反的方向重复先前的搜索命令有些字符有特殊含义。这些字符前面必须有反斜杠 ( \ ),才能作为搜索表达式的一部分包含在内。

先生。 特征及描述
1

^

在行的开头搜索(在搜索表达式的开头使用)。

2

匹配单个字符。

3

*

匹配零个或多个前一个字符。

4

$

行尾(在搜索表达式的末尾使用)。

5

[

启动一组匹配或不匹配的表达式。

6

<

将其放入用反斜杠转义的表达式中以查找单词的结尾或开头。

7

>

这有助于查看上面的“ < ”字符描述。

字符搜索在一行内搜索以查找命令后输入的字符。fF命令仅搜索当前行上的字符。f向前搜索,F向后搜索,光标移动到找到的字符的位置。

t和T命令仅在当前行搜索字符,但对于t ,光标移动到该字符之前的位置,而T 则向后搜索该行到该字符之后的位置。

设置命令

您可以使用以下:set命令更改 vi 屏幕的外观和感觉。进入命令模式后,键入:set,然后键入以下任意命令。

先生。 命令与说明
1

:设置IC

搜索时忽略大小写

2

:设置艾

设置自动缩进

3

:设置诺艾

取消自动缩进

4

:设置nu

在左侧显示带有行号的行

5

:设置开关

设置软件制表位的宽度。例如,您可以使用此命令将移位宽度设置为 4 — :set sw = 4

6

:设置ws

如果设置了wrapscan,并且在文件底部没有找到该单词,它将尝试从开头搜索它

7

:设置wm

如果此选项的值大于零,编辑器将自动“自动换行”。例如,要将换行边距设置为两个字符,您可以输入::set wm = 2

8

:设置罗

将文件类型更改为“只读”

9

:设定期限

打印终端类型

10

:设置bf

丢弃输入中的控制字符

运行命令

vi 能够从编辑器中运行命令。要运行命令,您只需进入命令模式并输入:! 命令。

例如,如果您想在尝试使用该文件名保存文件之前检查该文件是否存在,您可以键入:! ls ,您将在屏幕上看到ls的输出。

您可以按任意键(或命令的转义序列)返回到 vi 会话。

替换文本

替换命令 ( :s/ ) 使您能够快速替换文件中的单词或单词组。以下是替换文本的语法 -

:s/search/replace/g

g代表全局该命令的结果是光标所在行的所有出现位置都被更改。

重要注意事项

以下几点将增加您使用 vi 的成功 -

  • 您必须处于命令模式才能使用这些命令。(随时按 Esc 两次以确保您处于命令模式。)

  • 您必须小心使用命令。这些是区分大小写的。

  • 您必须处于插入模式才能输入文本。