跳转至

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 将读取该文本,并将其置于command模式。

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

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

vim编辑器对 VI 的界面和功能进行了许多改进。

vim [-c command] [file]

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

在会话期间,VI 使用一个缓冲区文件,其中记录了用户所做的所有更改。

说明

只要用户没有保存其工作内容,就不会修改原始文件。

在启动时,VI 处于 command 模式。

提示

ENTER 键结束一行,但如果屏幕不够宽,VI 会自动换行,默认情况下为 wrap 配置。 可能不需要这些换行符,可使用 nowrap 配置。

要退出 VI ,请从 command 模式中按:,然后键入:

  • q不保存退出(quit);
  • w 保存当前你的工作内容(write);
  • wqwrite quit) 或者 xeXit)保存并退出。

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

要在没有确认的情况下强制退出,必须在前面的命令中添加!

警告

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

操作模式

在 VI 中,有3种工作模式:

  • command 模式
  • insertion 模式
  • ex 模式

VI 的原理是在 command 模式和 insertion 模式之间交替使用。

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

command 模式

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

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

命令不会显示在屏幕上。

insert 模式

这是针对文本内容的修改模式。 要从 command 模式访问它,您必须按下除更改模式之外还将执行操作的特殊键。

文本内容不是直接输入到文件,而是输入到内存的缓冲区当中。 这些更改仅在保存文件时有效。

Ex 模式

这是针对文件的修改模式。 要访问它,您必须首先切换到 command 模式,然后频繁地以字符 : 开头输入 ex 命令。

ENTER 键验证输入的命令。

移动光标

command 模式下,有几种移动光标的方法。

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

移动光标后,VI保持 command 模式。

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

字符

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

, n, l or nl

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

, n, l or nl

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

, n, k or nk

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

, n, j or nj

  • 移动到行的末尾:

$ or END

  • 移动到行的开头:

0 or POS1

从单词的第一个字符开始

单词是由字母或数字组成的, 使用标点符号和撇号分隔单词。

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

如果行已经结束,则 VI 自动转到下一行。

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

w or nw

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

b or nb

从一行上的任何位置

  • 移动到最后一行文本:

G

  • 移动到第 n 行:

nG

  • 移动到屏幕的第一行:

H

  • 移动到屏幕的中间行:

M

  • 移动到屏幕的最后一行:

L

插入文本

command 模式下,有几种插入文本的方法。

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

说明

要将 VI 切换到 insertion 模式, 您必须按 ESC 键返回到 command 模式。

与字符相关的

  • 在字符前插入文本:

i (insert)

  • 在字符后插入文本:

a (append)

与行相关的

  • 在行首插入文本:

I

  • 在行尾插入文本:

A

与文本相关的

  • 在行前插入文本:

O

  • 在行后插入文本:

o

字符、单词和行

VI 允许通过管理以下各项进行文本编辑:

  • 字符,
  • 单词,
  • 行。

在每种情况下,都可以:

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

这些操作是在 command 模式下完成的。

字符

  • 删除一个或 n 个字符:

x or nx

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

rcharacter

  • 用其他字符替换多个字符:

RcharactersESC

说明

R 命令切换到 replace 模式,这是一种 insert 模式。

单词

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

dw 或者 ndw

  • 复制一个或 n 个单词:

yw 或者 nyw

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

p 或者 np

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

P 或者 nP

  • 替换一个单词:

cwwordESC

提示

必须将光标放在要剪切(或者复制)的单词的第一个字符下,否则 VI 将只剪切(或者复制)光标和末尾之间的单词部分。 要删除一个单词就是把它剪切掉。 如果之后没有粘贴,则会清空缓冲区并删除单词。

  • 删除 (剪切) 一或 n 行:

dd 或者 ndd

  • 复制一或 n 行:

yy 或者 nyy

  • 将已复制或删除的内容粘贴到当前行之后一次或 n 次:

p 或者 np

  • 将已复制或删除的内容粘贴到当前行之前一次或 n 次:

P 或者 nP

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

d0

  • 从光标到行尾删除(剪切):

d$

  • 从行首复制到光标:

y0

  • 从光标复制到行尾:

y$

  • 删除(剪切)当前行中的文本:

dL 或者 dG

  • 从当前行复制文本:

yL 或者 yG

取消操作

  • 撤销上一次的操作:

u

  • 撤消当前行上的操作:

U

取消撤销

  • 取消一个撤销

Ctrl+r

EX 命令

Ex模式允许您对文件进行操作(保存、布局、选择等)。 在Ex模式下输入搜索和替换命令, 命令显示在页面底部,必须使用 ENTER 键进行验证。

要切换到 Ex 模式,请在 command 模式下键入 :

文件行号

  • 显示/隐藏行号:

:set nu 或者更长的 :set number

:set nonu 或者更长的 :set nonumber

搜索字符串

  • 从光标中搜索字符串:

/string

  • 搜索光标之前的字符串:

?string

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

n

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

N

在 VI 中使用通配符可以更方便的搜索。

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

示例:

/[Ww]ord:搜索word 或者 Word

/[1-9]word:搜索 1word2word... xword 中, x 表示一个数字

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

示例:

/^Word

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

示例:

/Word$

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

示例:

/W.rd : 搜索 WordWard ...

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

示例:

/W*d

Note: 如果要在匹配字符串时(临时的)忽略大小写,请键入:set ic

替换字符串

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

:1,$ s/search/replace

Note: 您还可以使用 :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

也可以在用户家目录下,在名为 .exrc 的文件中输入 <>Ex 命令。 在每次VI或VIM启动时,都将读取并应用命令。

vimtor 命令

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

vimtutor