Vi 和 Vim 之间到底有什么关系?深入解析编辑器领域的“父子”与“进化”

在 Linux 和 Unix 系统管理、软件开发等领域,命令行文本编辑器是必不可少的工具。当你踏入这个领域,两个名字会频繁出现:ViVim。新手常常会感到困惑:它们是一个东西吗?我该学哪个?为什么有些系统上只有 vi 命令,却能打开 Vim?

这篇博客将为你彻底厘清 Vi 和 Vim 之间的关系。我们将从历史渊源讲起,深入对比两者的区别,并通过实例演示 Vim 如何继承并极大地增强了 Vi,最终为你提供清晰的学习路径和最佳实践。

目录#

  1. 核心结论:一句话概括关系
  2. 历史的回眸:Vi 的诞生
  3. 时代的进化:Vim 的崛起
  4. 详细对比:Vi 与 Vim 的核心区别
  5. 实践指南:如何学习和使用
  6. 最佳实践与技巧
  7. 总结
  8. 参考资料

核心结论:一句话概括关系#

Vim 是 Vi 的一个功能超级增强版和现代化实现。 你可以将 Vi 视为经典但功能基础的“父亲”,而 Vim 则是青出于蓝而胜于蓝的“儿子”,它不仅 100% 兼容 Vi 的所有指令,还增加了大量强大特性,如语法高亮、代码折叠、插件系统等,使其成为一个现代化的、高效的文本编辑器。

在绝大多数现代 Linux 发行版(如 Ubuntu, CentOS, Fedora)中,当你输入 vi 命令时,实际启动的是 vim,这通常是通过一个名为 vivim 的符号链接实现的。你可以通过命令验证:

# 查看 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)。
图形界面纯命令行。除了终端版本,还提供独立的图形界面版本(如 gvimmvim)。
模式指示无明确提示当前模式。底部状态栏会显示当前模式(如 -- 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!(不保存强制退出)。

示例:一个简单的编辑流程#

  1. 在终端输入 vim test.txt
  2. 你处于正常模式。按 i 键,屏幕左下角出现 -- INSERT --,进入插入模式
  3. 输入一段文字,例如 Hello, World!
  4. <Esc> 键返回正常模式
  5. 输入 :wq 然后按回车,文件被保存并退出 Vim。

最佳实践与技巧#

  1. 拥抱 Vim: 除非你正在维护一个只安装了最小化 Vi 的古老系统,否则请毫不犹豫地使用 Vim 及其全部功能。它是提高效率的利器。
  2. 熟练使用 :help: Vim 的内置帮助是宝藏。遇到不熟悉的命令,比如想了解可视化模式,直接输入 :help visual-mode
  3. 渐进式配置: 不要一开始就复制一个庞大的配置文件(如 spf13-vimamix/vimrc)。从零开始,根据自己的需求逐个添加配置到 ~/.vimrc 文件中。例如,先开启语法高亮和行号:
    " ~/.vimrc 基础配置
    syntax on   " 开启语法高亮
    set number  " 显示行号
    set autoindent " 自动缩进
  4. 掌握核心移动和编辑命令
    • 移动h/j/k/l(左/下/上/右),w(下一个单词),b(上一个单词),^(行首),$(行尾)。
    • 编辑dd(删除整行),yy(复制整行),p(粘贴),u(撤销),Ctrl+r(重做)。
  5. 学习可视化模式: 按 v 进入字符可视化模式,V 进入行可视化模式,Ctrl+v 进入块可视化模式。选中后可以进行批量缩进(>/<)、删除、复制等操作,极其高效。

总结#

Vi 和 Vim 的关系是计算机世界中一个经典的“继承与发展”案例。Vi 作为开山鼻祖,确立了模态编辑的范式,并因其极高的可移植性成为系统管理的基石。Vim 则站在巨人的肩膀上,通过引入现代化特性,将这一范式发扬光大,使其不仅适用于快速配置文件的编辑,更成为一个强大的集成开发环境(IDE)。

对于今天的用户而言,学习 Vi 就是学习 Vim 的核心精髓,而使用 Vim 则是享受现代化编辑工具带来的极致效率。 理解了这一点,你就能更好地驾驭这个强大的编辑器,无论是在服务器上快速调试,还是在本地进行复杂的项目开发。

参考资料#

  1. Vim 官方网站
  2. Vi - Wikipedia
  3. Vim - Wikipedia
  4. vimtutor: 安装在你的系统中最棒的 Vim 入门教程。在终端中输入 vimtutor 并花 30 分钟完成它!
  5. Vim 内置帮助: 在线版本的 Vim 帮助文档。