Vi 和 Vim 之间到底有什么关系?深入解析编辑器领域的“父子”与“进化”
在 Linux 和 Unix 系统管理、软件开发等领域,命令行文本编辑器是必不可少的工具。当你踏入这个领域,两个名字会频繁出现:Vi 和 Vim。新手常常会感到困惑:它们是一个东西吗?我该学哪个?为什么有些系统上只有 vi 命令,却能打开 Vim?
这篇博客将为你彻底厘清 Vi 和 Vim 之间的关系。我们将从历史渊源讲起,深入对比两者的区别,并通过实例演示 Vim 如何继承并极大地增强了 Vi,最终为你提供清晰的学习路径和最佳实践。
目录#
核心结论:一句话概括关系#
Vim 是 Vi 的一个功能超级增强版和现代化实现。 你可以将 Vi 视为经典但功能基础的“父亲”,而 Vim 则是青出于蓝而胜于蓝的“儿子”,它不仅 100% 兼容 Vi 的所有指令,还增加了大量强大特性,如语法高亮、代码折叠、插件系统等,使其成为一个现代化的、高效的文本编辑器。
在绝大多数现代 Linux 发行版(如 Ubuntu, CentOS, Fedora)中,当你输入 vi 命令时,实际启动的是 vim,这通常是通过一个名为 vi 到 vim 的符号链接实现的。你可以通过命令验证:
# 查看 vi 命令指向何处
ls -l `which vi`
# 输出可能类似:lrwxrwxrwx 1 root root 20 Apr 5 10:00 /usr/bin/vi -> /etc/alternatives/vi
# 或者直接指向 vim:lrwxrwxrwx 1 root root 20 Apr 5 10:00 /usr/bin/vi -> vim.tiny历史的回眸:Vi 的诞生#
- 时间: 1976 年
- 作者: 比尔·乔伊(Bill Joy)
- 背景: Vi 是作为 BSD Unix 系统的一部分被开发的。它的前身是行编辑器
ex。Vi(Visual)的核心创新在于提供了一个全屏幕的视觉化编辑模式,这在当时是革命性的,因为它允许用户在整个屏幕范围内移动光标并编辑文本,而不是像行编辑器那样一次只能操作一行。 - 地位: Vi 因其高效和普适性,被纳入了 POSIX 标准,这意味着几乎所有类 Unix 系统(包括 Linux 和 macOS)都预装了一个 Vi 或与其兼容的编辑器。这也是为什么在系统维护(如单用户救援模式)时,Vi 往往是唯一可用的编辑器。
时代的进化:Vim 的崛起#
- 时间: 1991 年
- 作者: 布莱姆·米勒(Bram Moolenaar)
- 全称: Vi IMproved(Vi 改进版)
- 初衷: 最初是为 Amiga 系统开发的一个 Vi 克隆版,但很快其功能就远远超越了原版 Vi。
- 目标: 在保持 Vi 的模态编辑(正常模式、插入模式、命令行模式)和所有命令集兼容性的前提下,提供更多、更强大的功能。
详细对比:Vi 与 Vim 的核心区别#
下表清晰地展示了两者的关键差异:
| 特性 | Vi(原版/最小化版本) | Vim |
|---|---|---|
| 语法高亮 | 不支持 | 支持。不同颜色的关键字、字符串、注释,极大提升代码可读性。 |
| 多级撤销 | 通常只支持撤销上一步操作(单级)。 | 支持无限次撤销(Undo)和重做(Redo)。这是最实用的改进之一。 |
| 可视化模式 | 不支持。 | 支持。可以用光标选择文本块(行、列、块可视化模式),然后进行批量操作。 |
| 插件系统 | 无。 | 强大的插件生态系统。用户可以通过插件实现代码自动补全、语法检查、版本控制集成等。 |
| 脚本语言 | 支持有限的 ex 脚本。 | 拥有自己强大的脚本语言(Vimscript),也支持其他语言(如 Python, Lua)接口,实现高度自定义。 |
| 跨平台支持 | 主要在 Unix 系统。 | 支持所有主流平台(Windows, macOS, Linux)。 |
| 图形界面 | 纯命令行。 | 除了终端版本,还提供独立的图形界面版本(如 gvim 或 mvim)。 |
| 模式指示 | 无明确提示当前模式。 | 底部状态栏会显示当前模式(如 -- INSERT --),对新手更友好。 |
| 搜索高亮 | 搜索时光标跳转,但不高亮所有匹配项。 | 高亮显示所有匹配的搜索结果。 |
| 分屏与标签页 | 不支持。 | 支持水平/垂直分屏和标签页,方便同时编辑多个文件。 |
| 在线帮助 | 帮助文档简单。 | 拥有极其详尽和完整的 :help 文档系统。 |
实践指南:如何学习和使用#
1. 从 Vi 模式开始学习#
对于初学者,一个非常好的建议是:在 Vim 中,先使用 Vi 的模式来学习。
Vim 默认配置可能已经开启了很多扩展功能。为了纯粹地体验和学习 Vi 的核心哲学,你可以在启动 Vim 时使用兼容模式:
# 以 Vi 兼容模式启动 Vim
vim -N -u NONE # -N 设置 nocompatible,-u NONE 不加载任何配置文件或者,在 Vim 内部执行:
:set compatible在这个模式下,Vim 的行为会非常接近原版 Vi,让你专注于掌握最核心的模态编辑概念和基本命令。
2. 基础模式切换(Vi/Vim 通用)#
这是 Vi 哲学的基石,必须熟练掌握:
- 正常模式: 也称为命令模式。这是启动后的默认模式。在此模式下,所有键盘输入都被视为命令,用于移动光标、删除、复制、粘贴等。
- 从插入模式返回: 按
<Esc>键。
- 从插入模式返回: 按
- 插入模式: 在此模式下,你可以像在普通编辑器中一样输入文本。
- 从正常模式进入: 按
i(在光标前插入)、a(在光标后追加)、o(在当前行下方打开新行)等。
- 从正常模式进入: 按
- 命令行模式: 在正常模式下按
:进入。用于执行保存、退出、搜索替换等更复杂的命令。- 例如:
:wq(保存并退出)、:q!(不保存强制退出)。
- 例如:
示例:一个简单的编辑流程#
- 在终端输入
vim test.txt。 - 你处于正常模式。按
i键,屏幕左下角出现-- INSERT --,进入插入模式。 - 输入一段文字,例如
Hello, World!。 - 按
<Esc>键返回正常模式。 - 输入
:wq然后按回车,文件被保存并退出 Vim。
最佳实践与技巧#
- 拥抱 Vim: 除非你正在维护一个只安装了最小化 Vi 的古老系统,否则请毫不犹豫地使用 Vim 及其全部功能。它是提高效率的利器。
- 熟练使用
:help: Vim 的内置帮助是宝藏。遇到不熟悉的命令,比如想了解可视化模式,直接输入:help visual-mode。 - 渐进式配置: 不要一开始就复制一个庞大的配置文件(如
spf13-vim或amix/vimrc)。从零开始,根据自己的需求逐个添加配置到~/.vimrc文件中。例如,先开启语法高亮和行号:" ~/.vimrc 基础配置 syntax on " 开启语法高亮 set number " 显示行号 set autoindent " 自动缩进 - 掌握核心移动和编辑命令:
- 移动:
h/j/k/l(左/下/上/右),w(下一个单词),b(上一个单词),^(行首),$(行尾)。 - 编辑:
dd(删除整行),yy(复制整行),p(粘贴),u(撤销),Ctrl+r(重做)。
- 移动:
- 学习可视化模式: 按
v进入字符可视化模式,V进入行可视化模式,Ctrl+v进入块可视化模式。选中后可以进行批量缩进(>/<)、删除、复制等操作,极其高效。
总结#
Vi 和 Vim 的关系是计算机世界中一个经典的“继承与发展”案例。Vi 作为开山鼻祖,确立了模态编辑的范式,并因其极高的可移植性成为系统管理的基石。Vim 则站在巨人的肩膀上,通过引入现代化特性,将这一范式发扬光大,使其不仅适用于快速配置文件的编辑,更成为一个强大的集成开发环境(IDE)。
对于今天的用户而言,学习 Vi 就是学习 Vim 的核心精髓,而使用 Vim 则是享受现代化编辑工具带来的极致效率。 理解了这一点,你就能更好地驾驭这个强大的编辑器,无论是在服务器上快速调试,还是在本地进行复杂的项目开发。
参考资料#
- Vim 官方网站
- Vi - Wikipedia
- Vim - Wikipedia
vimtutor: 安装在你的系统中最棒的 Vim 入门教程。在终端中输入vimtutor并花 30 分钟完成它!- Vim 内置帮助: 在线版本的 Vim 帮助文档。