Contents

VI和VIM编辑之间的差异

1. 概述

在本文中,我们将了解 Linux 命令行中可用的vivim文本编辑器,以及它们之间的关系。此外,我们将讨论如何区分我们正在使用哪一个以及为每种情况选择哪一个。

2. 什么是vi

vi (代表“可视界面”)是一个标准的命令行文本编辑器。它起源于用于命令行的 Unix 文本编辑器,称为ed ,它在不同的编辑器中演变,最终成为vi

要运行vi,我们可以从命令行调用它,并附加我们要编辑的文件:

$ vi /path/to/file/to/edit

** vi是一个模态文本编辑器:它有多种模式。**打开文件时,我们不是处于插入模式,而是处于命令模式。这就是为什么我们还不能在文件上写!要进入插入模式,我们必须按:

$ i

完成修改后,我们可以使用Esc键返回命令模式。要保存和退出,我们使用:

$ :wq

(后跟Enter键)。如果不保存任何更改,我们可以退出:

$ :q

vi的某些模式(开放模式和可视模式)由Single UNIX SpecificationPOSIX 标准描述。这意味着vi编辑器与符合这些标准的设备兼容。因此,我们很可能会在我们可以使用的大多数设备中找到vi

3. 什么是vim

vim 是另一个命令行文本编辑器,代表“vi 改进”。** vimvi的一个实现,具有改善用户体验和提高文本编辑器效率的额外功能。**如果安装在我们的系统中,我们可以像vi一样启动vim

$ vim /path/to/file/to/edit

我们看到了一个与vi非常相似的界面,它也有不同的模式。要编辑一个简单的文件,过程与vi的过程相同。但是,vim中可用的改进在于细节。

** vim中但vi中没有的一些功能**是窗口拆分和选项卡、代码突出显示、宏、多次撤消和重做、命令行历史记录、模式匹配和单词完成。所有这些功能都可以帮助开发人员和作家提高他们的生产力。

4. 如何区分vivim

从他们的定义和手册页中,很明显vim是一个编辑器,它涵盖了vi中可用的可能性的超集。我们可以在几乎所有的 Unix 操作系统中找到vi

但是,许多操作系统已将vi的功能替换为vim。在其中一些操作系统中,我们仍然可以运行命令vi,因为它是指向vim的符号链接!这就是为什么在打开vi时,我们可能会看到vim启动窗口。我们确实以最小模式运行vim来模仿vi知道我们是否有vi或指向vim的符号链接的方法是调用帮助(仅在vim中可用):

$ vi -h
vi: illegal option -- h
Usage: vi [- | -s] [-l] [-L] [-R] [-r [file]] [-t tag]
[-v] [-V] [-w size] [+cmd | -c cmd] file...

为了比较,让我们检查vim -h的输出(如果vi指向vim,它类似于vi -h的输出):

$ vim -h
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Apr 25 2022 22:13:25)
Usage: vim [arguments] [file ..]       edit specified file(s)
   or: vim [arguments] -               read text from stdin
   or: vim [arguments] -t tag          edit file where tag is defined
   or: vim [arguments] -q [errorfile]  edit file with first error
Arguments:
...

我们也可以在编辑器内部进行检查。通过在命令模式下输入*:help ,我们会在vi中看到错误,但在vim*中会看到帮助手册。

5. 我们应该更喜欢哪一个?

**对于简单的文本编辑任务,vivim的行为相似。**然而,vi是首选,因为我们可以期望它在 POSIX 兼容(或至少大部分兼容)系统上。此外,在性能方面,vim需要比vi更多的资源,因为它具有更广泛的功能。

**但是,当处理更长的代码片段或更复杂的部分时,vim的功能会派上用场。**掌握vim(和vi)的学习曲线很陡峭,一开始看起来很麻烦。但是,从长远来看,它可能会有所回报,尤其是在我们编写大量代码的情况下。即使vim的功能确实有用,但还是有人喜欢vi,因为它简单,需要将编辑问题减少到vi的功能。

最后,值得一提的是vi的其他实现提供了比vim 更多的功能。**最著名的是 neovim 。此外,有些实现具有图形用户界面,同时保持与vim-gtk 相同的底层行为。