跳至内容

VI 文本编辑器

在本章中,您将学习如何使用 VIsual 编辑器。


目标:在本章中,未来的 Linux 管理员将学会如何

✔ 使用 VI 编辑器的主要命令;
✔ 使用 VI 编辑器修改文本。

🏁 用户命令Linux

知识⭐
复杂度⭐ ⭐

阅读时间: 20 分钟


Visual (VI) 是 Linux 下一款流行的文本编辑器,尽管其人体工程学设计有限。它确实是一个完全在文本模式下的编辑器:每个操作都通过键盘按键或专用命令完成。

功能非常强大,而且非常实用,因为它对于基本应用程序来说总体上是最小化的。因此,在系统出现故障时也可以访问。它的通用性(存在于所有 Linux 发行版和 Unix 系统上)使其成为管理员至关重要的工具。

它的功能包括

  • 插入、删除和修改文本;
  • 复制单词、行或文本块;
  • 搜索和替换字符。

vi 命令

vi 命令打开 VI 文本编辑器。

vi [-c command] [file]

示例

vi /home/rockstar/file
选项 信息
-c 命令 指定一个命令在打开时执行 VI

如果文件存在于路径所指示的位置,VI 会读取它并将其置于命令模式。

如果文件不存在,VI 会打开一个空白文件,在屏幕上显示一个空页面。保存文件时,它将采用命令指定的名称。

如果 vi 命令在未指定文件名的情况下执行,VI 会打开一个空白文件并在屏幕上显示一个空页面。保存文件时,VI 会要求输入文件名。

vim 编辑器继承了 VI 的界面和功能,并进行了许多改进。

vim [-c command] [file]

在这些改进中,用户拥有语法高亮,这对于编辑 shell 脚本或配置文件非常有用。

在会话期间,VI 使用缓冲区文件来记录用户的所有更改。

注意

在用户保存工作之前,原始文件不会被修改。

启动时,VI 处于命令模式。

技巧

一行文本在按 Enter 键后结束,但如果屏幕不够宽,VI 会自动换行,默认配置为换行。这些自动换行可能不符合要求,这就是不换行配置。

要从命令模式退出 VI,请按 :,然后输入

  • q 退出而不保存(quit);
  • w 保存您的工作(write);
  • wqwrite quit)或 xeXit)保存并退出。

在命令模式下,连续按两次大写 Z 键即可保存并退出。

您必须在上述命令后添加!以强制退出而不确认。

警告

没有定期备份,因此您必须记住定期保存工作。

操作模式

在 VI 中,有 3 种工作模式

  • 命令模式;
  • 插入模式;
  • ex 模式。

VI 的理念是在命令模式和插入模式之间交替进行。

第三种模式,ex 模式,是从旧文本编辑器继承的底部命令模式。

命令模式

这是 VI 启动时的默认模式。要从任何其他模式访问它,只需按 Esc 键。

此时,所有键盘输入都被解释为命令,并执行相应的操作。这些主要是用于编辑文本的命令(复制、粘贴、撤销等)。

命令不会显示在屏幕上。

插入模式

这是文本修改模式。要从命令模式访问它,您必须按下特殊键,这些键在执行操作的同时还会改变模式。

文本不是直接输入到文件中,而是输入到内存中的缓冲区区域。更改只有在保存文件后才生效。

Ex 模式

这是文件修改模式。要访问它,您必须首先切换到命令模式,然后输入ex 命令,该命令通常以字符:开头。

通过按 Enter 键可以验证命令。

移动光标

命令模式下,有几种方法可以移动光标。

鼠标在文本环境中不活动,但在图形环境中,可以逐个字符地移动它,但存在快捷键可以更快地进行。

移动光标后,VI 仍处于命令模式。

光标放置在目标字符下方。

相对于字符

  • 向左移动一个或 n 个字符

n hn h

  • 向右移动一个或 n 个字符

n ln l

  • 向上移动一个或 n 个字符

n kn k

  • 向下移动一个或 n 个字符

n jn j

  • 移动到行尾

$End

  • 移动到行首

0Home

相对于单词的第一个字符

单词由字母或数字组成。标点符号和撇号分隔单词。

如果光标在单词中间,w 会移到下一个单词,b 会移到单词的开头。

如果到达行尾,VI 会自动移到下一行。

  • 向右移动一个或 n 个单词

wn w

  • 向左移动一个或 n 个单词

bn b

相对于行中的任意位置

  • 移动到文本的最后一行

G

  • 移动到第 n

n G

  • 移动到屏幕的第一行

H

  • 移动到屏幕的中间行

M

  • 移动到屏幕的最后一行

L

  • 移动到文件内容的起始行

g g

插入文本

命令模式下有几种插入文本的方法。

输入其中一个键后,VI 会切换到插入模式。

注意

VI 会切换到插入模式。因此,您需要按 Esc 键返回命令模式。

相对于字符

  • 在字符前插入文本

iinsert

  • 在字符后插入文本

aappend

相对于行

  • 在行首插入文本

I

  • 在行尾插入文本

A

相对于文本

  • 在行前插入文本

O

  • 在行后插入文本

o

字符、单词和行

VI 通过管理来允许文本编辑

  • 字符,
  • 单词,
  • 行。

在每种情况下都可以

  • 删除,
  • 替换,
  • 复制,
  • 剪切,
  • 粘贴。

这些操作在命令模式下完成。

字符

  • 删除一个或 n 个字符

xn x

  • 用一个字符替换另一个字符

r+字符

  • 用多个字符替换多个字符

R+字符+Esc

注意

R 命令切换到替换模式,这是一种插入模式。

单词

  • 删除(剪切)一个或 n 个单词

d+wn+d+w

  • 复制一个或 n 个单词

y+wn+y+w

  • 在光标后粘贴一个或 n 次单词

pn+p

  • 在光标前粘贴一个或 n 次单词

Pn+P

  • 替换一个单词

c+w+单词+Esc

技巧

必须将光标定位在要剪切(或复制)的单词的第一个字符下方,否则 VI 只会剪切(或复制)光标与单词末尾之间的部分。删除一个单词就是剪切它。如果之后不粘贴,缓冲区将清空,单词将被删除。

  • 删除(剪切)一行或 n

d+dn+d+d

  • 复制一行或 n

y+yn+y+y

  • 在当前行之后粘贴复制或删除的内容一次或 n

pn+p

  • 在当前行之前粘贴复制或删除的内容一次或 n

Pn+P

  • 删除(剪切)从行首到光标的内容

d+0

  • 删除(剪切)从光标到行尾的内容

d+$

  • 复制从行首到光标的内容

y+0

  • 复制从光标到行尾的内容

y+$

  • 删除(剪切)从当前行到文件最后一行的内容

d+G

  • 删除(剪切)从当前行到屏幕最后一行的内容

d+L

  • 复制从当前行到文件末尾的内容

y+G

  • 复制从当前行到屏幕末尾的内容

y+L

取消操作

  • 撤销上一次操作

u

  • 撤销当前行的操作

U

取消撤销

  • 取消撤销

Ctrl+R

EX 命令

Ex 模式允许您对文件进行操作(保存、布局、选项等)。搜索和替换命令也是在Ex 模式下输入的。命令显示在页面底部,并且必须通过 Enter 键进行验证。

要从命令模式切换到Ex 模式,请键入 :

文件行号

  • 显示/隐藏编号

:set nu 或更长的 :set number

:set nonu 或更长的 :set nonumber

搜索字符串

  • 从光标处搜索字符串

/字符串

  • 在光标前搜索字符串

?字符串

  • 查找下一个匹配的字符串

n

  • 查找上一个匹配的字符串

N

VI 中有正则表达式可以方便搜索。

  • []:搜索一个字符范围或一个具有指定可能值的单个字符。

示例

/[Ww]ord:搜索 wordWord

/[1-9]word:搜索 1word2wordxword,其中 x 是一个数字

  • ^:搜索以字符开头的行。

示例

/^Word

  • $:搜索以字符结尾的行。

示例

/Word$

  • .:搜索除换行符外的任何单个字符。

示例

/W.rd:搜索 WordWard 等。

  • *:前一个字符匹配的次数,0 次或任意次数。

示例

/W*d

注意: 如果您想在匹配字符串时忽略大小写(临时),请键入 :set ic

替换字符串

从文本的第一行到最后一行,将搜索到的字符串替换为指定的字符串

:1,$ s/search/replace

注意: 您也可以使用 :0,$s/search/replace 指定从文件的绝对开头开始。

从第 n 行到第 m 行,将搜索到的字符串替换为指定的字符串

:n,m s/search/replace

默认情况下,每行只替换找到的第一个匹配项。要强制替换每个匹配项,您必须在命令末尾添加 /g

:n,m s/search/replace/g

浏览整个文件以将搜索到的字符串替换为指定的字符串

:% s/search/replace

删除指定行

  • 删除空行

:g/^$/d

  • 删除从第 n 行到第 m 行的行

:n,md

  • 删除包含字符串的行

:g/string/d

  • 删除不包含字符串的行

:g!/string/d

  • 删除所有以 # 开头的行

:g/^#/d

这里的 g 代表 global(全局)。

文件操作

  • 保存文件

:w

  • 另存为

:w file

  • 将第 n 行到第 m 行的内容保存到另一个文件

:n,m w file

  • 重新加载文件的最后记录

e!

  • 将另一个文件的内容粘贴到光标后

:r file

  • 不保存退出编辑文件

:q

  • 退出编辑在会话期间已修改但未保存的文件

:q!

  • 退出文件并保存

:wq:x

其他功能

可以通过指定要加载的选项来执行 VI 进行会话。为此,您必须使用 -c 选项。

vi -c "set nu" /home/rockstar/file

也可以将Ex 命令输入到名为 .exrc 的文件中,该文件位于用户的主目录中。命令将在每次启动 VI 或 VIM 时被读取和应用。

vimtutor 命令

有一个教程可以学习如何使用 VI。可以使用 vimtutor 命令访问。

vimtutor

可视化模式

此模式是命令模式的一个子项。您可以通过键入 vV 来完成它;前者操作内容是字符级别的,后者操作内容是行级别的。

信息

您可以使用箭头键来标记您想要操作的字符或行内容。

字符级别

  • 删除(剪切) - 按 v 键标记您要删除的字符内容,然后按 x 键删除
  • 复制 - 按 v 键标记要复制的字符内容,然后按 y 键复制

行级别

  • 删除(剪切) - 按 V 键标记要删除的行,然后按 x 键删除
  • 复制 - 按 V 键标记要复制的行,然后按 y 键复制