Unix 简明教程

Unix/Linux - The vi Editor Tutorial

在本章中,我们将了解 vi 编辑器在 Unix 中如何工作。在 Unix 中有许多方法可以编辑文件。使用面向屏幕的文本编辑器 vi 编辑文件是最好的方法之一。此编辑器使您能够在与文件中其他行同上下文中编辑行。

现在还推出了一个名为 VIM 的 vi 编辑器的改进版本。在此,VIM 代表 *Vi IM*proved。

vi 通常被认为是 Unix 编辑器的实际标准,因为 −

  1. 它通常在 Unix 系统的所有版本中都可用。

  2. 它的实现方式在所有平台上都非常相似。

  3. 它需要的资源很少。

  4. 它比 edex 等其他编辑器更易于使用。

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

Starting the vi Editor

下表列出了 vi 编辑器的基本命令 −

Sr.No.

Command & Description

1

vi filename 如果它尚不存在,则创建新文件,否则打开现有文件。

2

vi -R filename 以只读模式打开现有文件。

3

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

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

$vi testfile

上述命令将生成以下输出 −

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

您会注意到光标后每一行上都有一个 tilde (~)。波浪线表示未使用的行。如果一行不以波浪线开头并且看起来是空白的,则那里有一个空格、制表符、换行符或其他不可查看的字符。

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

Operation Modes

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

  1. Command mode - 此模式可以使用户执行管理任务,如保存文件、执行命令、移动光标、剪切(拖拽)和粘贴行或词,以及查找和替换。在此模式下,所键入的任何内容都将解释为命令。

  2. Insert mode - 此模式可以使用户在文件中插入文本。在此模式下键入的所有内容都将解释为输入并置于文件中。

vi 始终从 command mode 开始。要输入文本,您必须处于仅需键入 i 即可进入的插入模式。要退出插入模式,请按 Esc 键,该键将使您返回命令模式。

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

Getting Out of vi

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

保存编辑器内容的命令为 :w 。您可以将以上命令与退出命令结合使用,或者使用 :wq 并回车。

最简单的方法是使用 ZZ 命令 save your changes and exit vi 。当您处于命令模式时,键入 ZZZZ 命令的操作方式与 :wq 命令相同。

如果想要指定/说明文件的任何特定名称,可以通过 :w 后指定该名称。例如,如果您想要将您正在处理的文件保存为以 filename2 为名的另一个文件名,您将键入 :w filename2 并回车。

Moving within a File

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

Sr.No.

Command & Description

1

k 光标向上移动一行

2

j 光标向下移动一行

3

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

4

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

在文件中移动需要考虑以下几点 −

  1. vi 区分大小写。使用命令时,您需要留意大小写。

  2. vi 中的大多数命令都可以通过您希望执行该操作的次数作为前缀。例如, 2j 将光标向下移动两行。

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

Control Commands

在表中给出了使用控制键执行相应功能的命令:

Editing Files

要编辑该文件,您需要进入插入模式。有许多方法可从命令模式进入插入模式:

Sr.No.

Command & Description

1

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

2

I 在当前行的开头插入文本

3

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

4

A 在当前行的末尾插入文本

5

o 在光标位置下方创建新行以进行文本输入

6

O 在光标位置上方创建新行以进行文本输入

Deleting Characters

这里列出了用于删除打开文件中的字符和行的重要命令:

Sr.No.

Command & Description

1

x 删除光标位置下的字符

2

X 删除光标位置之前的字符

3

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

4

d^ 从当前光标位置一直删除到行的开头

5

d$ 从当前光标位置一直删除到行的末尾

6

D 从光标位置一直删除到当前行的末尾

7

dd 删除光标所在的行

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

建议在继续之前练习这些命令。

Change Commands

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

Sr.No.

Command & Description

1

cc 删除行内容,使您进入插入模式。

2

cw 将光标所在的单词从光标转换为单词的 w 小写结尾。

3

r 替换光标下的字符。在输入替换内容后,vi 会返回命令模式。

4

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

5

s 使用您键入的字符替换当前字符。之后,您将保留在插入模式中。

6

S 删除光标所在的线并用新文本替换它。输入新文本后,vi 将保留在插入模式中。

Copy and Paste Commands

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

Sr.No.

Command & Description

1

yy Copies the current line.

2

yw 从光标所处的 lowercase w 字符复制当前单词,直到单词末尾。

3

p 将复制的文本置于光标后。

4

P 将复制的文本置于光标前。

Advanced Commands

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

Word and Character Searching

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

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

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

  2. ? 命令在文件中向后(向上)搜索。

nN 命令分别在相同或相反的方向重复先前的搜索命令。一些字符具有特殊含义。这些字符之前必须加反斜杠 ( \ ) 才能作为搜索表达式的组成部分。

Sr.No.

Character &Description

1

^ 在行首搜索(在搜索表达式开始处使用)。

2

. Matches a single character.

3

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

4

$ 行尾(在搜索表达式的结尾处使用)。

5

[ 开始一组匹配或不匹配表达式。

6

< 该项内容放于带反斜杠转义符的表达式中,用于查找单词的结尾或开头。

7

> 这有助于查看上面的“ < ”字符说明。

字符搜索在单行内进行,用于找到命令后输入的字符。 fF 命令仅在当前行中搜索字符。 f 向前搜索, F 向后搜索,光标移动到找到的字符位置。

tT 命令仅在当前行中搜索字符,但对于 t ,光标移动到字符前面的位置,而 T 向后搜索整行直到字符的后面位置。

Set Commands

您可以使用以下 :set 命令来更改 vi 屏幕的外观。在命令模式后,键入 :set ,再输入下述任意命令。

Sr.No.

Command & Description

1

:set ic 搜索时忽略大小写

2

:set ai Sets autoindent

3

:set noai Unsets autoindent

4

:set nu 在左侧显示带行号的行

5

:set sw 设置软件制表符的宽度。例如,您可以使用此命令 — :set sw = 4 设置一个4的shift宽度

6

:set ws 如果设置了 wrapscan 并且在文件底部未找到该单词,系统将尝试在开头处搜索该单词

7

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

8

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

9

:set term Prints terminal type

10

:set bf 丢弃输入中的控制字符

Running Commands

vi 有能力在编辑器内运行命令。要运行命令,您只需进入命令模式并输入 :! 命令。

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

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

Replacing Text

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

:s/search/replace/g

g 表示全局。此命令的结果是光标行上的所有出现的单词均发生改变。

Important Points to Note

下列要点将让您使用 vi 更加成功 -

  1. 您必须在命令模式下才能使用命令。(随时按两次 Esc,以确保您在命令模式下。)

  2. 您必须小心使用命令。区分大小写。

  3. 您必须在插入模式下才能输入文本。