LFCS #2:如何在 Linux 中安装和使用 Vi/Vim 作为全文编辑器
几个月前,Linux 基金会推出了LFCS(Linux 基金会认证系统管理员)认证,以帮助世界各地的个人验证他们是否有能力在 Linux 系统上执行基本到中级的系统管理任务。
Linux 管理任务包括第一手的故障排除和维护,以及智能决策,以便知道何时向上级支持团队提出问题。
该系列标题为LFCS(Linux 基金会认证系统管理员)的准备第 1 至 33 部分,涵盖以下主题:
这篇文章是33 个教程系列的第 2 部分,在本部分中,我们将介绍 LFCS 认证考试所需的基本文件编辑操作和 Vi/Vim 编辑器中的理解模式。
在 Vi 编辑器中执行基本文件编辑操作
Vi是第一个为 Unix 编写的全屏文本编辑器。尽管它旨在小巧而简单,但对于习惯使用GUI 文本编辑器(例如NotePad++或gedit等)的人来说,它可能有点困难。
要使用Vi,我们必须首先了解这个强大程序运行的3种模式,以便稍后开始学习其强大的文本编辑过程。
请注意,大多数现代 Linux 发行版都附带vi的一个变体,称为vim(“ Vi 改进版”),它支持的功能比原始vi多。因此,在本教程中,我们将交替使用vi和vim。
如果您的发行版没有安装Vim,您可以按如下方式安装。
$ sudo apt install vim [On Debian, Ubuntu and Mint] $ sudo yum install vim [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/vim [On Gentoo Linux] $ sudo apk add vim [On Alpine Linux] $ sudo pacman -S vim [On Arch Linux] $ sudo zypper install vim [On OpenSUSE]
我为什么要学习 Vi?
学习 vi 编辑器至少有两个好理由。
- vi始终可用(无论您使用什么发行版),因为它是 POSIX 所要求的。
- vi不会消耗大量的系统资源,并且允许我们执行任何可以想象到的任务而无需将手指从键盘上移开。
此外,vi还内置了非常丰富的手册,可以:help
在程序启动后立即使用命令启动,该手册包含的信息比 vi/m 的 man 页还要多。
启动 Vi 编辑器
要启动vi,请在命令提示符中键入vi 。
# vi
然后按下i
进入插入模式,即可开始输入。
启动vi/m 的另一种方法是。
# vi filename
这将打开一个名为 filename 的新缓冲区(稍后会详细介绍缓冲区),您稍后可以将其保存到磁盘。
了解 Vi 模式
Vi编辑器有多种模式,每种模式都有不同的用途并允许用户执行特定的操作。
以下是您应该了解的主要模式:
Vi 命令行模式
在命令模式中,vi允许用户浏览文件并输入vi命令,这些命令是一个或多个字母的简短且区分大小写的组合。几乎所有命令都可以以数字作为前缀,以重复该命令的次数。
例如,yy(或Y)复制整个当前行,而3yy(或3Y)复制整个当前行以及接下来的两行(总共 3 行)。
我们始终可以通过按Esc键进入命令模式(无论我们在哪种模式下工作)。在命令模式下,键盘按键被解释为命令而不是文本,这一事实往往会让初学者感到困惑。
Vi Ex 模式
在ex模式下,我们可以操作文件(包括保存当前文件和运行外部程序)。要进入此模式,我们必须:
在命令模式下键入冒号 ( ),然后直接键入需要使用的 ex-mode 命令的名称。之后,vi 会自动返回命令模式。
Vi 插入模式
在插入模式(通常使用字母i
进入此模式)下,我们只需输入文本即可。大多数按键都会导致文本显示在屏幕上(一个重要的例外是Esc键,它退出插入模式并返回命令模式)。
Vi 命令用法
下表列出了常用的 vi 命令。文件编辑命令可以通过在命令后附加感叹号来强制执行(例如,:q!
强制退出而不保存)。
键盘命令 | 描述 |
h 或左箭头 | 向左移动一个字符 |
j 或向下箭头 | 向下一行 |
k 或向上箭头 | 向上一行 |
l (小写 L)或向右箭头 | 向右移动一个字符 |
赫 | 转至屏幕顶部 |
大号 | 转至屏幕底部 |
格 | 转至文件末尾 |
瓦 | 向右移动一个单词 |
b | 向左移动一个单词 |
0(零) | 转到当前行的开头 |
^ | 转到当前行的第一个非空字符 |
$ | 转到当前行的末尾 |
Ctrl-B | 返回上一屏 |
Ctrl-F | 前进一屏 |
我 | 在当前光标位置插入 |
我 (大写 i) | 在当前行的行首插入 |
J(大写 j) | 将当前行与下一行合并(移动下一个阵容) |
一个 | 追加到当前光标位置之后 |
o (小写 O) | 在当前行后创建一个空白行 |
O(大写 o) | 在当前行之前创建一个空白行 |
r | 替换当前光标位置的字符 |
R | 在当前光标位置覆盖 |
十 | 删除当前光标位置的字符 |
十 | 删除当前光标位置之前(左侧)的字符 |
日 | 剪切(以便稍后粘贴)整个当前行 |
德 | 从当前光标位置剪切到行尾(该命令相当于 d$) |
yX | 给出移动命令 X,从当前光标位置复制(抽取)适当数量的字符、单词或行 |
yy 或 Y | 复制整个当前行 |
页 | 粘贴到当前光标位置之后(下一行) |
磷 | 粘贴到当前光标位置之前(上一行) |
。 (时期) | 重复上一个命令 |
你 | 撤消上一个命令 |
乌 | 撤消最后一行的最后一个命令。只要光标仍在该行上,此操作就会有效。 |
n | 查找搜索中的下一个匹配项 |
否 | 查找搜索中的上一个匹配项 |
:n | 下一个文件;当指定多个文件进行编辑时,此命令加载下一个文件。 |
:e 文件 | 加载该文件来代替当前文件。 |
:r 文件 | 将文件内容插入到当前光标位置之后(下一行) |
:问 | 退出而不保存更改。 |
:w 文件 | 将当前缓冲区写入文件。要附加到现有文件,请使用 :w >> file。 |
:wq | 写入当前文件的内容并退出。相当于 x! 和 ZZ |
:r! 命令 | 执行命令并将输出插入到当前光标位置之后(下一行)。 |
Vi 选项
运行vim时以下选项会派上用场(我们需要将它们添加到我们的~/.vimrc文件中)。
# echo set number >> ~/.vimrc # echo syntax on >> ~/.vimrc # echo set tabstop=4 >> ~/.vimrc # echo set autoindent >> ~/.vimrc
- 当 vi 打开现有文件或新文件时,set number显示行号。
- syntax on 打开语法高亮显示(针对多个文件扩展名),以使代码和配置文件更具可读性。
- set tabstop=4将制表符大小设置为 4 个空格(默认值为 8)。
- 设置自动缩进将前一个缩进延续到下一行。
在 Vi 中搜索和替换文本
vi能够根据搜索将光标移动到特定位置(一行或整个文件)。它还可以在用户确认或不确认的情况下执行文本替换。
在一行内搜索
该f
命令搜索一行并将光标移动到当前行中指定字符的下一个出现位置。
例如,该命令fh
会将光标移动到当前行中该字母的下一个实例。请注意,您要搜索的h
字母或字符不会出现在屏幕上的任何位置,但按下Enter后,该字符将突出显示。f
例如,这是我f4
在命令模式下按下后得到的。
搜索整个文件
使用/
命令,然后输入要搜索的单词或短语。可以使用命令中的上一个搜索字符串n
或下一个搜索字符串(使用命令)重复搜索。这是在命令模式下N
输入的结果。/Jane
搜索和替换文本
Vi uses a command (similar to sed’s) to perform substitution operations over a range of lines or an entire file.
To change the word “old
” to “young
” for the entire file, we must enter the following command.
:%s/old/young/g
Notice: The colon at the beginning of the command.
The colon (:
) starts the ex command, s
in this case (for substitution), %
is a shortcut meaning from the first line to the last line (the range can also be specified as n
,m
which means “from line n to line m”), old is the search pattern, while young is the replacement text, and g
indicates that the substitution should be performed on every occurrence of the search string in the file.
Alternatively, a c
can be added to the end of the command to ask for confirmation before performing any substitution.
:%s/old/young/gc
Before replacing the original text with the new one, vi/m will present us with the following message.
- y: perform the substitution (yes)
- n: skip this occurrence and go to the next one (no)
- a: perform the substitution in this and all subsequent instances of the pattern.
- q or Esc: quit substituting.
- l (lowercase L): perform this substitution and quit (last).
- Ctrl-e, Ctrl-y: Scroll down and up, respectively, to view the context of the proposed substitution.
Editing Multiple Files in Vi
Let’s type vim file1 file2 file3 in our command prompt.
# vim file1 file2 file3
First, vim will open file1. To switch to the next file (file2), we need to use the :n
command. When we want to return to the previous file, :N
will do the job.
In order to switch from file1 to file3.
a). The :buffers
command will show a list of the file currently being edited.
:buffers
b). The command :buffer 3
(without the s
at the end) will open file3 for editing.
In the image above, a pound sign (#
) indicates that the file is currently open but in the background, while %a
marks the file that is currently being edited.
On the other hand, a blank space after the file number (3 in the above example) indicates that the file has not yet been opened.
Temporary Vi Buffers
要将几行连续的行(例如,假设为4)复制到名为 a 的临时缓冲区(不与文件关联)中,并将这些行放在当前 vi 部分稍后的文件另一部分中,我们需要……
- 按下
ESC
键以确保我们处于 vi 命令模式。 - 将光标放在我们要复制的文本的第一行上。
- 键入“ a4yy ”将当前行以及后续 3 行复制到名为 a 的缓冲区中。我们可以继续编辑文件 - 我们不需要立即插入复制的行。
- 当我们到达复制行的位置时,在p或P命令之前使用“ a将复制的行插入到名为a 的缓冲区中:
- 键入“ ap将复制到缓冲区的行插入到光标所在的当前行之后。
- 键入“ aP将复制到缓冲区a 中的行插入到当前行之前。
如果愿意,我们可以重复上述步骤,将缓冲区的内容插入到文件中的多个位置。临时缓冲区(如本节中的缓冲区)在当前窗口关闭时被处理。
概括
正如我们所见,vi / m是一款功能强大且用途广泛的 CLI 文本编辑器。欢迎在下面分享您自己的技巧和评论。
更新:如果您想扩展您的VI编辑器技能,那么我建议您阅读以下两个指南,它们将指导您了解一些有用的 VI 编辑器技巧和窍门。
LFCS 电子书现已开放购买。立即订购,开始成为认证 Linux 系统管理员的旅程!
产品名称 | 价格 | 买 |
---|---|---|
Linux 基金会的 LFCS 认证准备指南 | 19.99 美元 | [立即购买] |
最后,但同样重要的一点是,请考虑使用以下链接购买您的考试券,以赚取少量佣金,这将帮助我们保持本书的更新。