vi编辑器

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

现在Linux还提供了一个改进版的vi编辑器,称为VIM。 这里,VIM代表Vi IMproved。

vi通常被认为是Linux编辑器中的事实标准,因为

  • 它通常可用于所有类型的Linux系统。
  • 它的实现非常相似。
  • 它需要很少的资源。
  • 它比其他编辑器更加用户友好。
  • 您可以使用vi编辑器来编辑现有文件或从头开始创建新文件。 您也可以使用此编辑器来读取文本文件。

启动vi编辑器

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

NO 命令和说明
1 vi filename 如果文件不存在则创建一个新文件,否则打开一个现有文件。
2 vi -R filename 以只读模式打开现有文件。
3 view filename 以只读模式打开现有文件。

以下是在当前工作目录中不存在文件testfile时创建新文件的示例

$vi testfile

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

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

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

您现在可以开始文件了。在继续之前,让我们先了解几个重要的概念。

操作模式

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

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

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

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

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

退出vi

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

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

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

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

在文件内移动

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

NO 命令和描述
1 k 将光标向上移动一行
2 j 将光标向下移动一行
3 h 将光标向左移动一个字符位置
4 k 将光标向右移动一个字符位置

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

  • vi区分大小写。 使用命令时需要注意大小写。
  • vi中的大多数命令都可以以您希望操作发生的次数作为开头。 例如,2j将光标向下移动两行。

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

No. 命令和描述
1 i
1 0|将光标定位在一行的开头
2 $ 将光标定位在一行的末尾
3 w 将光标定位到下一个单词
4 b 将光标定位到上一个单词
5 ( 将光标定位到当前句子的开头
6 ) 将光标定位到下一个句子的开头
7 E 移动到空白分隔词的末尾
8 { 向后移动一个段落
9 } 向前移动一个段落
10 [[ 向后移动一个部分
11 ]] 向前移动一个部分
12 n|移动到当前行的第n列
13 1G 移动到文件的第一行
14 G 移动到文件的最后一行
15 nG 移动到文件的第n行
16 :n 移动到文件的第n行
17 fc 向前移动到c
18 Fc 向后移动到c
19 H 移动到屏幕顶部
20 nH 移动到从屏幕顶部的第n行
21 M 移动到屏幕中间
22 L 移动到屏幕底部
23 nL 移动到从屏幕底部的第n行
24 :x 冒号后跟一个数字会将光标定位在由x表示的行号上

控制命令

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

No. 命令和描述
1 CTRL+d 向前移动1/2个屏幕
2 CTRL+f 向前移动一整屏
3 CTRL+u 向后移动1/2个屏幕
4 CTRL+b 向后移动一整屏
5 CTRL+e 将屏幕向上移动一行
6 CTRL+y 将屏幕向下移动一行
7 CTRL+I 重绘屏幕

编辑文件

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

No. 命令和描述
1 i 在当前光标位置之前插入文本
2 I 在当前行的开头插入文本
3 a 在当前光标位置后插入文本
4 A 在当前行的末尾插入文本
5 o 在光标位置下方为文本输入创建一个新行
6 O 在光标位置上方为文本输入创建一个新行

删除字符

这是一个重要命令列表,可用于删除打开文件中的字符和行

No. 命令和描述
1 x 删除光标所在位置下的字符
2 X 删除光标位置之前的字符
3 dw 从当前光标位置删除到下一个单词
4 d^ 从当前光标位置删除到行首
5 d$ 从当前光标位置删除到行尾
6 D 从光标位置删除到当前行的末尾
7 dd 删除光标所在的行

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

建议先练习这些命令,然后再继续。

更改命令

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

No. 命令和描述
1 cc 删除该行的内容,让您处于插入模式。
2 cw 更改光标所在的单词从光标到单词的结尾小写字母w。
3 r 替换光标下的字符。 vi 进入替换后返回命令模式。
4 R 覆盖以当前光标下的字符开头的多个字符。 您必须使用Esc来停止覆盖。
5 s 用您键入的字符替换当前字符。 之后,您将处于插入模式。
6 S 删除光标所在的行并用新文本替换它。 输入新文本后,vi仍处于插入模式。

复制和粘贴命令

No. 命令和描述
1 yy 复制当前行。
2 yw 从小写w光标所在的字符复制当前单词,直到单词结束。
3 p 将复制的文本放在光标之后。
4 P 将复制的文本放在光标之前。

高级命令

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

No. 命令和描述
1 J 将当前行与下一行连接起来。 多个j命令可以连接许多行。
2 << 将当前行向左移动。
3 >> 将当前行向右移动一个移位宽度。
4 ~ 切换光标下字符的大小写。
5 ^G 同时按下 Ctrl 和 G 键可显示当前文件名和状态。
6 U 将当前行恢复到光标进入该行之前的状态。
7 u 撤消在文件中所做的最后更改。 再次键入u将重新进行更改。
9 :f 以百分数(%)显示当前文件中的位置和文件名,文件总数。
10 :f filename 将当前文件重命名为filename
11 :w filename 写入文件filename
12 :e filenamefilename打开另一个文件。
13 :cd dirname 将当前工作目录更改为dirname
14 :e # 在两个打开的文件之间切换。
15 :n 如果您使用 vi 打开多个文件,请使用:n转到下一个文件。
16 :p 如果您使用 vi 打开多个文件,请使用:p转到系列中的上一个文件。
17 :N 如果您使用 vi 打开多个文件,请使用 :N 转到系列中的上一个文件。
18 :r file 读取文件并将其插入到当前行之后。
19 :nr file 读取文件并将其插入到第 n 行之后。

单词和字符搜索

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

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

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

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

No. 字符和描述
1 ^ 表示匹配的字符应该在行首(在搜索表达式的开头使用)。
2 . 匹配单个字符
3 * 匹配零个或多个前一个字符。
4 $ 表示匹配的字符应该在行尾(在搜索表达式的末尾使用)。
5 [ 开始一组匹配或不匹配的表达式。
6 < 匹配单词的开头。
7 > 匹配单词的结尾。

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

tT命令只在当前行搜索一个字符,但对于t,光标移动到该字符前的位置,T向后搜索该行到该字符后的位置。

替换文本

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

:s/search/replace/g

g代表全局。 此命令的结果是光标所在行上的所有匹配项都被更改。

设置vi的外观和行为

您可以使用以下:set命令更改vi屏幕的外观。 进入命令模式后,键入:set后跟以下任何命令。

No. 命令和描述
1 :set ic 搜索时忽略大小写
2 :set ai 设置自动缩进
3 :set noai 取消自动缩进
4 :set nu 在左侧显示带有行号的行
5 :set sw 设置制表位的宽度。 例如,您可以使用此命令将移位宽度设置为4 — :set sw = 4
6 :set ws 如果设置了 wrapscan,并且文件底部没有找到该单词,它会尝试从头开始搜索
7 :set wm 如果此选项的值大于零,编辑器将自动“自动换行”。 例如,要将换行边距设置为两个字符,您可以输入: :set wm = 2
8 :set ro 将文件类型更改为“只读”
9 :set term 打印终端类型
10 :set bf 丢弃输入中的控制字符

运行命令

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

例如,如果您想在尝试使用该文件名保存文件之前检查文件是否存在,您可以键入:! ls,您将在屏幕上看到ls的输出。您可以按任意键(或命令的转义序列)返回到您的vi会话。