vi 家族
摘要
本文对 vi 系列文本编辑器及其衍生克隆版本进行了历史回顾和分类整理,涵盖了从 1977 年的原始版本到 Vim 等现代衍生版本。
暂无内容
查看缓存全文
缓存时间: 2026/05/13 06:36
# vi 家族
来源: https://lpar.ath0.com/posts/2026/05/the-vi-family/
Linux 用户的调查表明,`vi` 系列编辑器是最受欢迎的。`vi` 编辑器是一个基于终端的文本编辑器,其历史可以追溯到 1977 年。如果你好奇为什么这么多人会选择使用一个有着五十年历史且以陡峭初始学习曲线著称的文本编辑器,那是因为一旦你掌握了它,你就能以极其高效的方式进行编辑。此外,它几乎无处不在也是一个优势,这意味着你不必反复学习如何编辑——大多数 IDE 都提供 `vi` 按键绑定作为选项,包括 VS Code、IntelliJ IDEA 和 XCode。
`vi` 2.0 版本(1979 年)在当时来说是一款非常大的软件,而在 20 世纪 80 年代,它仅对拥有 AT&T 商业 UNIX® 许可证的用户可用。出于这个原因,许多人创建了 `vi` 的免费克隆版本,以便在 80 年代的个人电脑上运行。
如今有许多 `vi` 克隆版和衍生版可供选择,而我未能找到一份带有链接的良好且全面的列表,所以这是我整理的列表。日期为发布日期,尽我所能追溯而来。其中一些项目无疑已经停止维护,但由于它们可能几年才发布一次,很难判断。
我不会列出所有提供 `vi` 按键绑定选项的 IDE,但除此之外,欢迎提出补充建议。
## 原始 ex/vi (1977–2017?)
https://github.com/n-t-roff/heirloom-ex-vi/
原始的 2.11BSD vi,升级以支持 UTF-8,并修复了 POSIX 兼容性问题。
没有重大的“生活质量”改进,在编辑非常大的文件时会崩溃。
## STevie (1987–1989)
https://nosuch.com/tjt/STevie/
为 Atari ST 和 Amiga 设计的克隆版。如果你没有 ST 或 Amiga,你不想要这个。如果你*有*ST 或 Amiga,你可能仍然不想要这个,因为有更好的选择可用。Vim(见下文)源自 STevie。
## Elvis (1990–2024?)
https://github.com/mbert/elvis
最早的 `vi` 克隆版之一,构建用于在 MS-DOS、Minix 和其他 90 年代初的系统上运行。
Elvis 添加了改进(https://htmlpreview.github.io/?https://github.com/mbert/elvis/blob/master/README.html),包括多编辑缓冲区、多窗口和语法着色。与 STevie 不同,它使用文件缓冲区进行编辑,因此可以处理大于可用内存的文件。它曾被用于 BSD Unix 的 80386 移植版。
## xvi (1992–2017?)
https://martinwguy.github.io/xvi/
STevie 的衍生版,增加了多窗口和缓冲区。可能是最小的 `vi` 克隆版。
## Vile (1991–)
https://invisible-island.net/vile/
最初源自 Microemacs,赋予 `vi` 风格的编辑,但具有*更多*模式。增加了无限撤销、UTF-8 支持、语法高亮等功能。
## Vim (1991–)
https://www.vim.org/
可能是使用最广泛的 `vi` 克隆版。源自 STevie。增加了窗口、多缓冲区、各种脚本选项和 UTF-8 支持。能够处理非常大的文件(GB 级别)。
现在整合了 LLM 生成的代码。
## nvi (1994–)
https://repo.or.cz/nvi.git
基于 Elvis,重新实现了 `vi`,旨在核心行为上与原版完全相同。用于 4BSD Unix 发布。
增加了对额外脚本语言(Perl 和 Tcl)的支持。引入了使用数据库存储文件数据的功能。它可以打开约 GB 大小的文件,但会抱怨数据库页面大小。不幸的是,仍然不支持 UTF-8 文本。
## OpenBSD vi / OpenVi (1994—)
https://github.com/johnsonjh/OpenVi
`nvi` 的衍生版。经过大量清理,但仍不支持 UTF-8 文本。还缺少宏、脚本和语法高亮功能。
## BusyBox vi (2001–)
https://busybox.net/
BusyBox 包含一个小型且不完整(但可用)的 `vi` 实现。你将在 Alpine Linux 和嵌入式系统中遇到它。
## IllumOS vi (2005–)
https://github.com/illumos/illumos-gate/tree/master/usr/src/cmd/vi
AT&T UNIX® 的 SVR4 版 `vi`,于 2005 年作为 OpenSolaris 的一部分开源。
## nvi2 (2011–)
https://github.com/lichray/nvi2
为 nvi 添加了 UTF-8 支持以及多种 CJK 编码。
## neovim (2014–)
https://neovim.io/
通过移除对古老平台的支持来清理 Vim。增加了 LSP 支持、内置终端模拟器、Lua 脚本(替代 VimScript)以及其他许多功能。
现在整合了 LLM 生成的代码。
## EVi (2026–)
https://codeberg.org/evi-editor/evi
Vim 在开始整合 LLM 生成代码之前的分支。
## Vim Classic (2026–)
https://vim-classic.org/
Vim 8.3 版本(LLM 代码前)的分支,旨在通过人类提供长期支持。
## ToyBox vi (2027?)
https://codeberg.org/landley/toybox
ToyBox,非 GPL 的 BusyBox 克隆版,可能正在获取自己的(https://codeberg.org/landley/toybox/src/branch/master/toys/pending/vi.c)小型 `vi` 实现。
---
此外,还有一些实际上不是 vi,但是……
## Viper (1995–)
https://www.gnu.org/software/emacs/manual/html_mono/viper.html
Emacs 的 `vi` 按键绑定集。
## Kakoune (2012–)
http://kakoune.org/
受 `vi` 启发的模态编辑器,但按键绑定略有不同(https://raw.githubusercontent.com/mawww/kakoune/refs/heads/master/VIMTOKAK)。设计为极简,调用外部程序实现某些功能。
## Evil (2013–)
https://github.com/emacs-evil/evil
在 Emacs 上实现的另一种 `vi` 模态编辑。
## vis (2015–)
https://github.com/martanne/vis
类似于 `vi`,但从 Plan 9 编辑器 `sam` 中汲取了结构正则表达式和其他特性。(Sam 是图形编辑器,所以不在此列表中。)
## Helix (2021–)
https://github.com/helix-editor/helix
另一个新的模态编辑器,受 Kakoune 和 Vim 启发。同样,按键绑定有所不同(https://github.com/helix-editor/helix/wiki/Differences-from-other-editors#vim)。
相似文章
传统Vi编辑器
一篇回顾传统Vi文本编辑器及其在Unix系统中经久不衰的相关性的文章。
eh: 一个极简的类似vi的编辑器
eh 是一个用 C 语言编写的极简类似vi的编辑器,具有 UTF-8 支持、正则表达式搜索/替换、shell 过滤器和多级撤销/重做功能。早期版本在 2024 年的 IOCCC 中获奖。
没有地方比得上 $HOME:从 Vim 到 VS Code 再回到 Vim 的十年之旅
关于十年间使用 Vim、切换到 VS Code 再回归 Vim 的个人反思,探讨终端编辑器与 IDE 之间的权衡。
Vim Classic 8.3 发布
Vim Classic 8.3 已发布,这是 Vim 文本编辑器的一个长期支持分支,维护时不使用生成式人工智能工具,基于 Vim 8.2,并向后移植了错误修复和安全补丁。
专访:Drew DeVault 谈无 AI 版本的 Vim
专访 Drew DeVault,讨论他创建的剔除 AI 的 Vim 分支——Vim Classic,从实践、哲学和伦理角度阐述拒绝在软件开发中使用生成式 AI 的原因。