跳转到内容

学习 vi 编辑器/入门

来自维基教科书,开放世界中的开放书籍

学习 vi 编辑器: 入门基本任务使你的工作更容易高级任务细节Vi 克隆 (Vim基本导航模式提示和技巧对程序员有用的知识增强 VimVim 在 Windows 上VimL 脚本语言, Vile, BB vi)vi 参考

vi是一个功能强大的编辑器,在 Unix 和类 Unix 操作系统中无处不在,但也存在于许多其他操作系统上,甚至在 MS-DOS、Windows 和 Macintosh 上。如果不是原始的 vi,通常至少有一个很好的克隆在你的系统上运行。即使你使用其他编辑器,你也必须对 vi 有一定的了解,因为你是管理员。有时,当你的电脑崩溃,只留下一个最小的系统供你修复时,vi 是唯一可用的编辑器。

vi,发音类似于'vee eye',最初是由 Bill Joy 在 1976 年为伯克利的 BSD Unix 编写的,并且很快成为许多当时(原始)AT&T Unix 供应商特定版本的组成部分。后来它也被直接添加到 AT&T 的 System V Unix 中。Bill Joy 后来与人共同创办了Sun Microsystems,并成为当时该公司的首席科学家。vi 代表视觉,并且是对经典 Unix 编辑器 ed 的巨大改进。ed 是一个行编辑器。如果你仍然熟悉 MS-DOS,那么你可能知道 MS-DOS edlin 编辑器。ed 类似于 edlin,尽管比 edlin 更强大,但这并不意味着什么。

vi 也有一个行模式,称为 ex。事实上,有人可以争辩说,该程序实际上是两个编辑器合二为一,一个编辑器称为 vi,另一个称为 ex。在编辑过程中可以切换行模式和可视模式。也可以在启动时选择模式。然而,纯粹的 ex 使用很少见。可视模式是主要的模式。

虽然 vi 代表视觉,但经典的 vi 主要通过字符键操作,而不是通过鼠标或光标键操作。一旦你习惯了这一点,它就会变得非常方便,因为你的手移动到光标键或鼠标上的次数更少。

vi 还充当 Unix 终端控制功能的一种孵化器。由于 vi 需要控制终端以及当时许多不同类型的终端,因此引入了termcap(终端功能)数据库(后来被更灵活的terminfo 数据库取代)。vi 的内部高级屏幕控制库后来被分离出来,并成为curses - Unix 用于 CRT 屏幕处理的标准库。

<c>
单个字符,例如 'a' 或 '1'。
<ESC>, <Ctrl-[>
表示应该按下键盘上的 Escape (Esc) 键,这与 Control 和 '[' 相同。
<CR>
表示应该按下回车 (Enter) 键。
<TAB>
表示应该按下 Tab 键
<Ctrl-x>, <C-x>
表示应该同时按下 Control 键和 'x' 键。'x' 可以是键盘上的几乎任何其他键。
<Shift-x>, <S-x>, <X>
表示应该同时按下 Shift 键和 'x' 键
<Meta-x>, <M-x>
表示应该同时按下 Meta 或 Alt 键和 'x' 键。
:quit, :q
一个 Ex 命令。以 <:> 开头,后面跟着命令,最后以 <CR> 结尾。对于许多 Ex 命令,有长格式 (:quit) 和短格式 (:q)。
:set nocompatible
表示一个设置。
strlen ()
表示一个函数。
/pattern/, ?pattern?
一个搜索模式。vi 中的搜索模式是 正则表达式
:ranges/search/replace/options, :global /pattern/ delete
一个搜索模式与一个 Ex 命令结合。

vi 中的所有命令都区分大小写。


unix-command(section)

本书有时会引用 Unix 命令。首次出现时,该命令名称以典型的 Unix 风格书写。这种风格包括命令名称,后面跟着命令描述所在的联机帮助页部分,括在括号中。例如,sed(1) 指的是 Unix 的 sed 命令,它通常在 Unix 联机帮助页的第 1 部分中记录(sed 是 Unix 流编辑器;一个无需用户交互即可操作文本的工具)。

如果你还没有,如何获取 vi

[编辑 | 编辑源代码]

如果你正在运行 Unix 系统或类 Unix 系统(为简单起见,从现在开始我们将两者都称为“Unix 系统”),例如 BSD 或 Linux 发行版,甚至 Mac OS X,那么你一定在你的系统上安装了 vi 或其变体之一。

如果你正在运行 Windows,你可以获得一个名为 "vim""elvis" 的 vi 版本。如果你在旧的 Mac OS(OS X 之前)系统上,你可以从 这里 获取 MacVim Classic。

知名的 vi 变体

[编辑 | 编辑源代码]

如前所述,vi 有许多变体。它们之所以被创建是因为 vi 只能在相当昂贵的 Unix 操作系统上使用。虽然 vi 本身以及 nvi 是在伯克利为免费的 BSD Unix 变体创建的,但 BSD Unix 的使用需要原始的 AT&T Unix 许可证(这后来发生了变化,见下文)。例如,原始的 vi 使用了 AT&T 的 ed(1) 编辑器的代码。

随着时间的推移,BSD 替换了大部分原始的 AT&T 代码,直到今天 BSD 中不再有这样的代码,也不再需要原始的 Unix 许可证。作为替换 BSD 中所有 AT&T 代码工作的一部分,Keith Bostic 承担了创建 vi 克隆的任务,该克隆没有 AT&T 代码,称为 nvi。nvi 随后成为 BSD 的标准 vi,而不是原始的 vi。另一个 vi 克隆是 Elvis,由 Steve Kirkendal 编写。

随着时间的推移,nvi 进行了增强——例如,支持多个窗口——但最初它并不是为了增强而设计的,而只是“仅仅”是一个纯粹的克隆。

BSD 的原始 vi(内部包含 ed 代码)继续作为与 System V Unix 一起发布的 vi,因为 AT&T 很久以前就决定从 BSD 中获取它并将其添加到官方 Unix 中。当然,AT&T 对 AT&T Unix 许可证没有问题,所以他们可能从未替换过原始 vi 中的 ed 代码。

然而,有些人仍然认为 nvi 太简陋了,于是 vim 诞生了。vim(vi-improved),是另一个扩展 vi 功能的尝试。与 nvi 不同的是,vim 进一步扩展了 vi 的功能。然而,有些人发现 vim 往往过于强大。vim 有两种变体,一种是纯文本版本,另一种是 GUI 版本,后者称为 gvim

其他 vi 克隆包括前面提到的 elvisstevie。这些克隆诞生于 CP/M 和家用电脑领域,旨在将该编辑器也带到这些平台上。当然,它们后来被移植到 MS-DOS 和 Windows。如今,vim 似乎是免费/开源平台和专有平台上最流行的 vi 克隆。

您应该选择您觉得最舒服的版本——如果您对您使用的编辑器感到不满,它会影响您的工作效率。

使用 vi

[编辑 | 编辑源代码]

启动编辑器

[编辑 | 编辑源代码]

如果您运行的是 Unix 系统,则可以通过键入以下命令启动 vi

 vi<CR>

在命令行中。如果您运行的是 X,并且使用的是 GNOME、KDE、CDE/Motif 或 OpenLook 等桌面,您可能会有一个方便的启动按钮来启动编辑器——如果您有这样的设置,您只需点击该图标即可。

如果您使用的是 Windows 或 DOS,并且使用的是 elvis,则可以通过双击“winelvis.exe”来启动 Windows 编辑器,或者在 DOS 中,您可以在命令行中键入“elvis”来启动编辑器。

您将看到类似于以下屏幕的界面

~
~
~
~
~
~
"No File"

退出编辑器

[编辑 | 编辑源代码]

要暂时退出,请按 Escape 键(编辑器应该发出蜂鸣声),然后输入三个字符 :q! 并按回车键

<ESC>:q!<CR>

在您输入最后一个 <CR> 之前,屏幕将类似于以下界面

~
~
~
~
~
~
:q!

:q!:quit! 的简写形式,它退出编辑器,而不保存。

您应该会回到您的操作系统(或者更确切地说,回到您启动编辑器的 shell)。

还有其他方法可以退出,例如按 <Z><Z> (<Shift-z><Shift-z>) 将保存所有未保存的工作并退出编辑器。键入 :wq 将始终保存,即使没有未保存的更改,然后退出编辑器。 :x 如果没有未保存的更改,将写入并退出。 :wq:x 需要您之前提供过文件名,因此它不适用于上述简单示例。键入 :q 如果没有进行任何更改,将退出;如果进行了更改,vi 将打印类似于“自上次更改后未写入”的警告。

别担心

[编辑 | 编辑源代码]

许多第一次使用 vi 的用户都在这里停住了,再也不碰 vi 了。如果您尝试在启动后输入一些文本,您很可能会听到一系列蜂鸣声,并出现相当奇怪的行为。别担心。对于 vi 来说,这是完全正常的,编辑器并没有损坏。您很快就会明白为什么这是 vi 的正常行为。

既然您已经知道如何启动和退出编辑器,让我们继续学习如何在 vi 中完成任务vi: 请参阅 学习 vi 编辑器/基本任务


学习 vi 编辑器: 入门基本任务使你的工作更容易高级任务细节Vi 克隆 (Vim基本导航模式提示和技巧对程序员有用的知识增强 VimVim 在 Windows 上VimL 脚本语言, Vile, BB vi)vi 参考

华夏公益教科书