Unix 简明教程
Unix/Linux - The vi Editor Tutorial
在本章中,我们将了解 vi 编辑器在 Unix 中如何工作。在 Unix 中有许多方法可以编辑文件。使用面向屏幕的文本编辑器 vi 编辑文件是最好的方法之一。此编辑器使您能够在与文件中其他行同上下文中编辑行。
现在还推出了一个名为 VIM 的 vi 编辑器的改进版本。在此,VIM 代表 *Vi IM*proved。
vi 通常被认为是 Unix 编辑器的实际标准,因为 −
-
它通常在 Unix 系统的所有版本中都可用。
-
它的实现方式在所有平台上都非常相似。
-
它需要的资源很少。
-
它比 ed 或 ex 等其他编辑器更易于使用。
您可以使用 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 编辑器时,我们通常会遇到以下两种模式 −
-
Command mode - 此模式可以使用户执行管理任务,如保存文件、执行命令、移动光标、剪切(拖拽)和粘贴行或词,以及查找和替换。在此模式下,所键入的任何内容都将解释为命令。
-
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 。当您处于命令模式时,键入 ZZ 。 ZZ 命令的操作方式与 :wq 命令相同。
如果想要指定/说明文件的任何特定名称,可以通过 :w 后指定该名称。例如,如果您想要将您正在处理的文件保存为以 filename2 为名的另一个文件名,您将键入 :w filename2 并回车。
Moving within a File
要在不影响文本的情况下在一个文件中四处移动,您必须处于命令模式(按两次 Esc)。下表列出了一些可供您逐个字符移动的命令 −
Sr.No. |
Command & Description |
1 |
k 光标向上移动一行 |
2 |
j 光标向下移动一行 |
3 |
h 光标向左移动一个字符位置 |
4 |
l 光标向右移动一个字符位置 |
在文件中移动需要考虑以下几点 −
-
vi 区分大小写。使用命令时,您需要留意大小写。
-
vi 中的大多数命令都可以通过您希望执行该操作的次数作为前缀。例如, 2j 将光标向下移动两行。
vi 中还有许多其他方法可以在文件中移动。请记住,您必须处于命令模式 ( press Esc twice )。下表列出了一些在文件中四处移动的命令 −
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 将复制的文本置于光标前。 |
Word and Character Searching
vi 编辑器有两种搜索: string 和 character 。对于字符串搜索,使用 / 和 ? 命令。当您启动这些命令时,刚刚键入的命令将显示在屏幕的最后一行,您可以在其中键入要查找的特定字符串。
这两个命令仅在搜索发生的方向上有所不同 −
-
/ 命令在文件中向前(向下)搜索。
-
? 命令在文件中向后(向上)搜索。
n 和 N 命令分别在相同或相反的方向重复先前的搜索命令。一些字符具有特殊含义。这些字符之前必须加反斜杠 ( \ ) 才能作为搜索表达式的组成部分。
Sr.No. |
Character &Description |
1 |
^ 在行首搜索(在搜索表达式开始处使用)。 |
2 |
. Matches a single character. |
3 |
匹配前一个字符的零个或多个。 |
4 |
$ 行尾(在搜索表达式的结尾处使用)。 |
5 |
[ 开始一组匹配或不匹配表达式。 |
6 |
< 该项内容放于带反斜杠转义符的表达式中,用于查找单词的结尾或开头。 |
7 |
> 这有助于查看上面的“ < ”字符说明。 |
字符搜索在单行内进行,用于找到命令后输入的字符。 f 和 F 命令仅在当前行中搜索字符。 f 向前搜索, F 向后搜索,光标移动到找到的字符位置。
t 和 T 命令仅在当前行中搜索字符,但对于 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 会话。