- Unix / Linux 初学者指南
- Unix / Linux - 首页
- Unix / Linux - 什么是 Linux?
- Unix / Linux - 开始使用
- Unix / Linux - 文件管理
- Unix / Linux - 目录
- Unix / Linux - 文件权限
- Unix / Linux - 环境
- Unix / Linux - 基本实用程序
- Unix / Linux - 管道与过滤器
- Unix / Linux - 进程
- Unix / Linux - 通信
- Unix / Linux - vi 编辑器
- Unix / Linux Shell 编程
- Unix / Linux - Shell 脚本
- Unix / Linux - 什么是 Shell?
- Unix / Linux - 使用变量
- Unix / Linux - 特殊变量
- Unix / Linux - 使用数组
- Unix / Linux - 基本运算符
- Unix / Linux - 决策
- Unix / Linux - Shell 循环
- Unix / Linux - 循环控制
- Unix / Linux - Shell 替换
- Unix / Linux - 引号机制
- Unix / Linux - I/O 重定向
- Unix / Linux - Shell 函数
- Unix / Linux - 手册页帮助
- 高级 Unix / Linux
- Unix / Linux - 标准 I/O 流
- Unix / Linux - 文件链接
- Unix / Linux - 正则表达式
- Unix / Linux - 文件系统基础
- Unix / Linux - 用户管理
- Unix / Linux - 系统性能
- Unix / Linux - 系统日志
- Unix / Linux - 信号和陷阱
Unix/Linux - vi 编辑器教程
本章我们将了解 vi 编辑器在 Unix 中的工作方式。在 Unix 中有很多方法可以编辑文件。使用屏幕导向文本编辑器vi编辑文件是最佳方法之一。此编辑器允许您在文件中与其他行一起编辑上下文中的行。
vi 编辑器的改进版本,称为VIM,现已推出。这里,VIM 代表Vi IMproved(vi 改进版)。
vi 通常被认为是 Unix 编辑器的实际标准,因为:
它通常在所有 Unix 系统版本中都可用。
它的实现跨平台非常相似。
它需要的资源很少。
它比其他编辑器(如ed或ex)更友好。
您可以使用vi编辑器编辑现有文件或从头创建一个新文件。您也可以使用此编辑器仅读取文本文件。
启动 vi 编辑器
下表列出了使用 vi 编辑器的基本命令:
序号 | 命令及说明 |
---|---|
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 命令。当您处于命令模式时,键入ZZ。ZZ命令的工作方式与:wq命令相同。
如果要为文件指定/声明任何特定名称,可以通过在:w之后指定它来实现。例如,如果您想将正在处理的文件另存为名为filename2的其他文件名,则应键入:w filename2并按回车键。
在文件中移动
要在不影响文本的情况下在文件中移动,您必须处于命令模式(按两次 Esc)。下表列出了一些您可以用来一次移动一个字符的命令:
序号 | 命令及说明 |
---|---|
1 |
k 将光标向上移动一行 |
2 |
j 将光标向下移动一行 |
3 |
h 将光标向左移动一个字符位置 |
4 |
l 将光标向右移动一个字符位置 |
需要考虑以下几点才能在文件中移动:
vi 区分大小写。使用命令时需要注意大小写。
vi 中的大多数命令都可以加上您希望操作执行的次数作为前缀。例如,2j 将光标向下移动两个光标位置。
在 vi 中还有许多其他方法可以在文件中移动。请记住,您必须处于命令模式(**按两次 Esc**)。下表列出了一些在文件中移动的命令:
序号 | 命令及说明 |
---|---|
1 |
0 或 | 将光标定位在行首 |
2 |
$ 将光标定位在行尾 |
3 |
w 将光标定位到下一个单词 |
4 |
b 将光标定位到上一个单词 |
5 |
( 将光标定位到当前句子的开头 |
6 |
) 将光标定位到下一句的开头 |
7 |
E 移动到空格分隔单词的末尾 |
8 |
{ 向后移动一个段落 |
9 |
} 向前移动一个段落 |
10 |
[[ 向后移动一个节 |
11 |
]] 向前移动一个节 |
12 |
n| 移动到当前行中的第n列 |
13 |
1G 移动到文件的首行 |
14 |
G 移动到文件的最后一行 |
15 |
nG 移动到文件的第nth行 |
16 |
:n 移动到文件的第nth行 |
17 |
fc 向前移动到c |
18 |
Fc 向后移动到c |
19 |
H 移动到屏幕顶部 |
20 |
nH 移动到屏幕顶部第nth行 |
21 |
M 移动到屏幕中间 |
22 |
L 移动到屏幕底部 |
23 |
nL 移动到屏幕底部第nth行 |
24 |
:x 冒号后跟一个数字会将光标定位在由x表示的行号上 |
控制命令
以下命令可以与 Control 键一起使用,以执行下表中给出的功能:
序号 | 命令及说明 |
---|---|
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 |
i 在当前光标位置之前插入文本 |
2 |
I 在当前行的开头插入文本 |
3 |
a 在当前光标位置之后插入文本 |
4 |
A 在当前行的末尾插入文本 |
5 |
o 创建一个新行以在光标位置下方输入文本 |
6 |
O 创建一个新行以在光标位置上方输入文本 |
删除字符
以下是一些重要的命令列表,这些命令可用于删除打开文件中的字符和行:
序号 | 命令及说明 |
---|---|
1 |
x 删除光标位置下的字符 |
2 |
X 删除光标位置之前的字符 |
3 |
dw 从当前光标位置删除到下一个单词 |
4 |
d^ 从当前光标位置删除到行首 |
5 |
d$ 从当前光标位置删除到行尾 |
6 |
D 从光标位置删除到当前行尾 |
7 |
dd 删除光标所在的行 |
如上所述,vi 中的大多数命令都可以加上您希望操作执行的次数作为前缀。例如,2x 删除光标位置下的两个字符,而2dd 删除光标所在的两个行。
建议在继续操作之前练习这些命令。
更改命令
您还可以更改 vi 中的字符、单词或行,而无需删除它们。以下是相关的命令:
序号 | 命令及说明 |
---|---|
1 |
cc 删除该行的内容,并将您置于插入模式。 |
2 |
cw 更改光标所在的单词,从光标到单词结尾的小写w。 |
3 |
r 替换光标下的字符。输入替换内容后,vi 返回命令模式。 |
4 |
R 覆盖从当前光标下字符开始的多个字符。您必须使用Esc键停止覆盖。 |
5 |
s 将当前字符替换为您键入的字符。之后,您将处于插入模式。 |
6 |
S 删除光标所在的行,并将其替换为新文本。输入新文本后,vi 保持在插入模式。 |
复制和粘贴命令
您可以使用以下命令将行或单词从一个位置复制到另一个位置:
序号 | 命令及说明 |
---|---|
1 |
yy 复制当前行。 |
2 |
yw 复制当前单词,从光标所在的小写字母 w 开始,直到单词结尾。 |
3 |
p 将复制的文本放在光标之后。 |
4 |
P 将复制的文本放在光标之前。 |
高级命令
有一些高级命令可以简化日常编辑,并允许更有效地使用 vi:
序号 | 命令及说明 |
---|---|
1 |
J 将当前行与下一行连接。多个 j 命令可以连接多行。 |
2 |
<< 将当前行向左移动一个缩进宽度。 |
3 |
>> 将当前行向右移动一个缩进宽度。 |
4 |
~ 切换光标下字符的大小写。 |
5 |
^G 同时按下 Ctrl 和 G 键以显示当前文件名和状态。 |
6 |
U 将当前行恢复到光标进入该行之前的状态。 |
7 |
u 这有助于撤消在文件中进行的最后一次更改。再次键入“u”将重做更改。 |
8 |
J 将当前行与下一行连接。一个计数连接那么多行。 |
9 |
:f 显示文件中当前位置的百分比和文件名,以及文件的总行数。 |
10 |
:f filename 将当前文件重命名为 filename。 |
11 |
:w filename 写入文件 filename。 |
12 |
:e filename 打开另一个名为 filename 的文件。 |
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 编辑器有两种搜索:字符串和字符。对于字符串搜索,使用/和?命令。当您启动这些命令时,刚刚键入的命令将显示在屏幕的最后一行,您可以在其中键入要查找的特定字符串。
这两个命令的区别仅在于搜索发生的方向:
/命令向前(向下)搜索文件。
?命令向后(向上)搜索文件。
n和N命令分别重复上一个搜索命令,方向相同或相反。某些字符具有特殊含义。这些字符必须以反斜杠 (\) 开头才能作为搜索表达式的一部分。
序号 | 字符 & 描述 |
---|---|
1 |
^ 在行首搜索(在搜索表达式的开头使用)。 |
2 |
. 匹配单个字符。 |
3 |
* 匹配零个或多个前面的字符。 |
4 |
$ 行尾(在搜索表达式的结尾使用)。 |
5 |
[ 开始一组匹配或不匹配的表达式。 |
6 |
< 这是用反斜杠转义的表达式中用来查找单词结尾或开头的字符。 |
7 |
> 这有助于查看上面“<”字符的描述。 |
字符搜索在一个行内搜索以查找命令后输入的字符。f和F命令仅搜索当前行中的字符。f向前搜索,F向后搜索,光标移动到找到的字符的位置。
t和T命令仅搜索当前行中的字符,但对于t,光标移动到字符之前的位 置,而T向后搜索该行到字符之后的位置。
设置命令
您可以使用以下:set命令更改 vi 屏幕的外观和感觉。进入命令模式后,键入:set,然后键入以下任何命令。
序号 | 命令及说明 |
---|---|
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 能够在编辑器内运行命令。要运行命令,您只需要进入命令模式并键入:! command。
例如,如果您想在尝试使用该文件名保存文件之前检查文件是否存在,您可以键入:! ls,您将在屏幕上看到ls的输出。
您可以按任意键(或命令的转义序列)返回您的 vi 会话。
替换文本
替换命令 (:s/) 使您可以快速替换文件中的单词或单词组。以下是替换文本的语法:
:s/search/replace/g
g代表全局。此命令的结果是更改光标所在行上的所有出现。
重要说明
以下几点将有助于您成功使用 vi:
您必须处于命令模式才能使用这些命令。(随时按两次 Esc 键以确保您处于命令模式。)
您必须小心使用这些命令。这些命令区分大小写。
您必须处于插入模式才能输入文本。