研究过,但仍然对 Vi 与 Vim 感到困惑

研究过,但仍然对 Vi 与 Vim 感到困惑

我在 上的第一篇文章unix.stackexchange.com。请不要仅仅根据这篇文章的标题做出反应,因为我不会在没有研究过我的要求的情况下就跳出来。

Vi我对主题做了相当多的研究Vim。作为几个论坛,以及,或者线程说话,维姆是一个超集,在上面添加了很多有用的福利。

困惑#1
然而,现在,我正在做一些深入的 Linux 课程(想更好地学习这个操作系统),Linux 基金会讲师说:

通常,发行版上安装的程序是维姆, 和只是作为别名链接到它。

这似乎是合理的,无论我是否打开或者vim从我的终端,完全相同欢迎屏幕启动,具有相同的软件名称、版本、作者等。

困惑#2
然而,哪个 vim哪个六打印/usr/bin/目录中的不同文件。

所以,我真的很困惑,因为一方面很多人都这么说维姆是一个超集,但另一方面,我现在正在做的课程说,这两者都是维姆,并打开或者vim, 实际上,几乎(因为它们显示为相同的软件但行为不同)证明了这一点。

困惑#3
所以,

  1. 为什么人们说维姆是两个不同的程序维姆是一个超集?因为它们甚至具有相同的欢迎屏幕和版本号,至少在 CentOS 7 上是如此;

  2. 或者可能是一个别名维姆特别是在 CentOS 7(我现在正在使用)上,通常(在其他操作系统上)它们是两个不同的程序?但话又说回来,它们是两个不同的二进制文件..但它们有完全相同欢迎屏幕,这确实令人困惑;

  3. 如果它们没有不同,为什么.java当我使用以下命令打开源文件时会突出显示它vim并且 - 不是,当我打开它时

如果这篇文章有点混乱,我很抱歉,但这也正是让我困惑的地方,以及我收集和观察到的全部信息是什么。

它们似乎是相同的(也被讲师声称),但它们被告知是不同的(在不同的论坛上)并且它们实际上表现(这个java文件案例)并显示(与哪个) 不同。

那么,我应该从中理解什么呢?

更新:

按照要求做,vi --versionvim --version输出:

vi --version:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 15 2020 16:43:23)
Included patches: 1-207, 209-629
Modified by <[email protected]>
Compiled by <[email protected]>
Small version without GUI.  Features included (+) or not (-):

vim --version:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 15 2020 16:44:08)
Included patches: 1-207, 209-629
Modified by <[email protected]>
Compiled by <[email protected]>
Small version without GUI.  Features included (+) or not (-):

答案1

最初的 vi 是由 Bill Joy 于 1976 年创建的。此后,vi 编辑器已被重新实现了多次,vi 这个名称现在的含义是“任何大致实现原始 vi 的命令和键绑定的程序”。你可以说 vi 已经失去了它的商标,就像“阿司匹林”和“自动扶梯”这些词一样。

Vim 被认为是 vi 的超集,因为它实现了比原始 vi 更多的功能,但仍然大致保持与“vi”兼容。

vi命令和命令都存在于您的计算机上的原因vim是,程序的某些(感知)用途与“vi”的行为完全相同。程序vi较小,因此启动速度更快。 Vim 可能会以稍微不同的方式执行某些编辑命令,这可能被认为是错误的。当 vi 命令编写脚本时,这一点尤其重要,并且如果其他程序或脚本使用输出,则要求输出“恰到好处”。

Bash shell 也应用了相同的设计,它将两个程序合二为一。当调用 as 时sh,Bash 会模仿原始版本/bin/sh,即它限制其功能,并且在某些方面的行为与调用 as 时略有不同bash

您看到相同的欢迎屏幕和匹配的版本号的原因是这两个程序来自相同的源,并且是协同开发的。他们甚至可能共享相同的源代码。

答案2

Vim 确实源自 Bill Joy 的原始 vi。然而,如今,由于 vim 上的开发明显比 vi 更强大,因此许多发行版(包括 CentOS)使用功能较少的 vim 来模拟原始 vi 行为。

回答您的问题/困惑:

  1. 当您打开 vi 时,它会打开与 vim (将自己描述为 vim)相同的开始屏幕,因为它实际上是您正在运行的精简版 vim,而不是原始 vi。

  2. /usr/bin/vi/usr/bin/vim是不同的二进制文件,因为它们实际上都是从 vim 源代码编译的,但具有不同的功能(选项)。

  3. 语法突出显示在您使用时不可用vi file.java,但vim file.java由于编译时使用了不同的选项,因此可以使用。如果您仔细观察/usr/bin/vim --version和的输出,/usr/bin/vi --version您会发现前者显示+syntax等功能,而后者则显示-syntax.该列表就是我所说的“已编译的功能”。

我希望这能有所帮助,并能明白为什么它可能会令人困惑。

答案3

从你的vi --versionvim --version输出:

vi --version:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 15 2020 16:43:23)
Included patches: 1-207, 209-629
Modified by <[email protected]>
Compiled by <[email protected]>
Small version without GUI.  Features included (+) or not (-):


vim --version:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 15 2020 16:44:08)
Included patches: 1-207, 209-629
Modified by <[email protected]>
Compiled by <[email protected]>
Small version without GUI.  Features included (+) or not (-):

......我得出以下结论:

在 2020 年 12 月 15 日 16:43:23,无论 RedHat 的软件包构建器使用什么时区,它都会解压vim 7.4源代码,对其应用大量补丁,然后开始使用一组编译时配置构建二进制文件设置被设计得尽可能紧凑并最大限度地与经典兼容vi,即使这意味着禁用用户友好性功能。生成的二进制文件被命名为/usr/bin/vi.这将被打包为 RPM 包vim-minimal

注意:虽然生成的二进制文件名为vi,但毫无疑问这仍然是 Vim - 只是vi默认处于兼容模式。

然后,在 16:44:08,另一个包构建作业开始使用相同的源代码和补丁,但使用不同的编译时配置设置。此作业被配置为构建更现代、功能更丰富的配置,尽管它会消耗更多的磁盘空间,并且vi在某些方面可能与经典配置略有不同。此编译生成的二进制文件将被命名/usr/bin/vim并打包为vim-enhanced.

(因为这个版本说Small version without GUI,所以它不是打包的版本vim-X11- 这将是第三次构建运行和另一个 RPM 包。)


原版vi由 Bill Joy 在 20 世纪 70 年代编写,于 1978 年作为 BSD Unix 的一部分发布,此后授权给各种商业 Unix。 1983 年,代码库的所有权被 AT&T 作为其 UNIX System V 的一部分。因此,直到 2002 年放宽许可规则之前,只有拥有 AT&T 源代码许可的个人和公司才能分发vi.因此,寻找免费 Unix 风格编辑器的人们开始编写原始版本的克隆版本vi,以便拥有一个功能相同但无需昂贵的许可证要求的版本。

vim是这些克隆之一,经过增强。它于 1991 年向公众发布,此后进行了大量的跨平台开发。这使得它比原来的版本更具特色vi,并且它可能是目前最广泛的克隆版本vi

RedHat 对 Vim 的打包将单个源代码包生成的二进制文件拆分为多个 RPM 二进制包:vim-commonvim-filesystemvim-minimal和。其中,定义了一些目录,其他包可能会在其中放入语法或文件类型定义或向 Vim 添加功能的其他文件。取决于包并包含或所需的文件。其中的在线帮助文​​件也可供使用,但并非严格要求。vim-enhancedvim-X11vim-filesystemvim-commonvim-filesystemvim-enhancedvim-X11vim-commonvim-minimal

提供vim-minimal[/usr]/bin/vi二进制文件、 /usr/bin/ex配置文件及其手册页。/usr/bin/rvi/usr/bin/[r]view/etc/virc

vim-enhanced提供了/usr/bin/vim更现代的编译时配置默认值,但仍然仅具有基于终端的 UI。它明确要求 Perl 和vim-common.vim-X11提供具有完整 X11 GUI 和鼠标支持的 Vim 版本(带有名为 的二进制文件),并且具有与加上一组 X11 图标和库/usr/bin/gvim相同的要求。vim-enhanced

即使您在 RedHat 安装程序中选择“最小安装”,它也可能会包含vim-minimal.但vim-enhancedorvim-X11将完全是可选的。

如果您想更深入地了解该过程,我强烈建议您下载.src.rpm构建所有这些二进制 RPM 的相应软件包,将其解压到一个空目录中,然后研究vim.spec根目录下的文件。该文件包含每个 Vim 版本的确切配置选项。

如果你对传统文化感兴趣vi你可以在 ex-vi.sourceforge.net 找到它。但大多数现代 Linux 发行版(不针对嵌入式平台或以其他方式限制自身的绝对最小大小)可能会使用 Vim 作为传统vi.

相关内容