跳到内容

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 退出而不保存 (退出);
  • w 保存您的工作 (写入);
  • wq (写入退出) 或 x (退出) 保存并退出。

在命令模式下,连续两次点击大写状态的Z键以保存并退出。

您必须在之前的命令中添加! 来强制退出,无需确认。

警告

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

操作模式

在 VI 中,有 3 种工作模式

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

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

第三种模式,ex,是来自旧文本编辑器的页脚命令模式。

命令模式

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

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

命令不会显示在屏幕上。

插入模式

这是文本修改模式。要从命令模式访问它,您必须按下特殊键,这些键除了更改模式外还会执行操作。

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

Ex 模式

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

通过按Enter 键来验证命令。

移动光标

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

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

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

光标放置在所需字符下方。

从一个字符

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

Leftn Lefthn h

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

Rightn Rightln l

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

Upn Upkn k

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

Downn Downjn j

  • 移动到行尾

$End

  • 移动到行首

0Home

从单词的第一个字符

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

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

如果行已完成,VI 会自动转到下一行。

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

wn w

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

bn b

从行上的任何位置

  • 移动到文本的最后一行

G

  • 移动到第 n

n G

  • 移动到屏幕的第一行

H

  • 移动到屏幕的中间行

M

  • 移动到屏幕的最后一行

L

  • 移动到文件内容的第一行

g g

插入文本

命令模式下,有几种方法可以插入文本。

输入这些键之一后,VI 会切换到插入模式。

注意

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

相对于一个字符

  • 在字符前插入文本

i (插入)

  • 在字符后插入文本

a (追加)

相对于一行

  • 在行首插入文本

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

搜索字符串

  • 从光标处搜索字符串

/string

  • 在光标之前搜索字符串

?string

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

n

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

N

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

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

示例

/[Ww]ord:搜索wordWord

/[1-9]word:搜索1word2word ... xword,其中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 代表全局

文件操作

  • 保存文件

: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

您也可以在用户登录目录中的名为.exrc 的文件中输入Ex 命令。这些命令将在每次启动 VI 或 VIM 时读取和应用。

vimtutor 命令

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

vimtutor

可视化模式

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

信息

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

字符级别

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

行级别

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