Vi和Vim之间有什么区别?

我会很感激如果有人能告诉一个新手,vivim之间的区别是什么。我听说Vim是vi的继任者,但每当我尝试在Ubuntu中打开vi时,它总是打开vim

相关帖子 - Vim和VI之间的最大区别 - RBT
7个回答

功能上,vim 几乎是 vi 的一个合理超集。因此,vi 中的所有功能在 vim 中都可用。
Vim 添加了一些扩展功能。以下是一些扩展 vim 功能的例子:
  • Vim 已经移植到比 vi 更广泛的操作系统。
  • Vim 支持多种流行的编程语言(如 C/C++、Python、Perl、shell 等)的语法高亮、代码折叠等功能。
  • Vim 可与 cscope 集成。
  • Vim 可以使用 SSH 和 HTTP 等网络协议编辑文件。
  • Vim 包含多级撤销/重做功能。
  • Vim 允许分割屏幕以编辑多个文件。
  • Vim 可以编辑压缩档案中的文件(gzip、zip、tar 等)。
  • Vim 内置了用于比较文件的差异工具(vimdiff)。
  • Vim 支持插件,并可以更精细地控制配置和启动文件。
  • Vim 可以使用 vimscript 或外部脚本语言(如 Python、Perl、shell)进行脚本编写。
还有许多其他区别。请参考下面的来源,这些是了解更多信息的好去处。

来源:Vim.Org, Vim on Wikpedia

希望对你有所帮助!:)


"vi"是Unix早期的文本编辑器。它变得非常流行,并被纳入了Single Unix Specification(SUS)和POSIX,但直到2002年才免费提供。
因此,出现了几个类似vi的免费编辑器。Vim(“vi improved”)就是其中之一。 顾名思义,它为原始的vi界面添加了许多功能。
在Ubuntu中,默认只安装了Vim这个类似vi的编辑器,实际上默认情况下vi启动的就是Vim。
Ubuntu中还有其他一些流行的类似vi的编辑器,例如nvielvis

7在Ubuntu中,默认情况下只安装了Vim这个类似vi的编辑器。但在Xubuntu中,会显示vim: command not found,只能使用vi - phil294
9@Blauhirn 公平地说,从技术上讲,Xubuntu并不是Ubuntu。 - Captain Man
10@Blauhirn 而且那个 vi 运行的是 vim.tiny - muru
5+1 是对回答关于为什么 vi 打开 vim 而不是其他编辑器的问题的肯定回应。这正是原帖作者实际上所询问的内容。 - MycrofD
@Florian Diesch “vi实际上默认启动Vim。”这是不正确的 - 至少在我尝试运行它时,在Ubuntu 22.04 LTS上发现了这一点 $ vim Command 'vim' not found, but can be installed with: apt install vim # version 2:8.2.3995-1ubuntu2.5, o - likejudo

Vim FAQ有一个格式良好的列表: https://vimhelp.org/vim_faq.txt.html#faq-1.4 FAQ摘录:
- 多级撤销 - 标签、多窗口和缓冲区 - 灵活的插入模式(可以在插入模式中使用箭头键) - 宏 - 可视模式(可视选择文本的部分) - 块操作符 - 在线帮助系统 - 命令行编辑和历史记录 - 命令行补全(制表符补全) - 水平滚动(长行) - Unicode和国际化改进。

vi编辑器是Linux中最受欢迎的文本编辑器。我们可以说它有一个简单的黑白屏幕,即如果您键入任何命令,没有代码高亮显示,而vim是VI的改进版本,它也具有与vi相同的功能,但它还具有代码高亮显示。
两者都有这4种基本模式:
1. 写入模式 2. 命令模式 3. 可视模式 4. 退出模式

4我相当确定原始的vi没有Vim的可视模式。 - muru

它们之间确实有很大的区别。我每天都使用nvi和vim。虽然它们都不完美,但仍然比其他任何编辑器都要好。
Vim拥有更多的功能。除了语法高亮(在编译时支持)外,它还可以自动转换字符集、行尾等。它有多种行号显示方式,非常方便。Vim确实有很多优点。
不幸的是,Vim打破了vi的理念,混合了编辑模式,并引入了大量无用和冗余的功能。当然,一开始你可以方便地在插入模式下使用光标键移动,但它也会产生一些奇怪且不可预测的副作用(例如点号.的行为变得古怪)。
Vim(虽然它声称自己是改进版)也是一个臃肿、奇怪且不一致的vi和无模式编辑器的混合体。:P
尽管如此,我仍然喜欢它。而且通过调整配置,你可以解决其中大部分问题;D

13确实,一开始使用插入模式下的光标键是很方便的。这就是现在光标键的总体目的!我们已经不再处于80年代了,按下“向下”箭头应该将光标向下移动,而不是在屏幕上显示一些错误字符并发出嘟嘟声。 - PerlDuck

Vim也是Linux的文本编辑器。它是vi的升级版,其全名为vi improved。除了vi的功能外,它还具有多级撤消、可视化操作、语法高亮和易用性的特点。 vi和vim都是Linux中的编辑器。它们的区别在于vim更先进,可以看作是vi的升级版本。vi用于文本编辑,而vim更适用于编码。 Linux ESC:vi和vim之间的区别


补充一下@gen所说的,如果你不想亲自测试,直接从vimhelp.org上阅读会更容易些。 事实上,大多数人只使用了"真正"的vi的一小部分功能,甚至连vim或nvi的功能都很少用到。

https://vimhelp.org/vi_diff.txt.html

https://vimhelp.org/options.txt.html#%27compatible%27

https://vimhelp.org/vi_diff.txt.html#posix-compliance

我最大的发现是vim中撤销/重做功能的破..嗯..“改进”,以及“BACKSPACE”键的非经典行为,以及vim-tiny在某些情况下的速度较慢。 在我测试过的所有vim版本中,一次追加50,000次可以导致会话几乎被锁定一个小时。 而在nvi中,对相同数据进行2,000,000次追加只需要不到5秒钟。 vim开发人员知道这个错误,但他们认为修复它不值得。 ^[50000a使用vim还是nvi还是vi?^[ 最好不要在生产环境中尝试在vim中执行此操作。只是说说而已。
如果你不知道,^[是“ESC”键的代码。你应该知道这个。
通常情况下,你在vim中的基本技能,如^[ibla foo bar^[:wq!,会足够适用于“真正”的vi,如果你需要支持像AIX、HP-UX或Solaris这样的真正UNIX系统。 但是,如果你在插入模式下依赖箭头键来“移动”,那么你将会遇到困难。 在插入模式下,你不应该移动光标,无论是使用箭头键还是其他方式,无论是80年代还是现在。移动应该在命令模式下完成。这样更快,并且可以发挥vim|n/vi的真正威力。 否则,你可能还不如使用MS Win记事本。 如果按照vim|n/vi的设计意图使用,那么hjkl和/或箭头键——在命令模式下——仍然是你在文件中导航的最后手段。这种方法效率低下且速度慢。 你在插入模式下输入“新”文本,而几乎所有的移动和文本编辑都在命令模式下完成。
这是很多人似乎不明白的一部分。 插入模式下,箭头键无效,当按下时会输入"垃圾",因为它们实际上是在告诉vi插入控制码来表示箭头键,所以它会输入^B。然后人们抱怨UNIX/vi正在按照他们的要求执行操作!如果你不想vi插入该字符,那就别再告诉它插入。简单说:在命令模式下进行移动。
此外,vim|n/vi有两种共同的模式:插入模式和命令模式。 没有所谓的"退出"模式。^[只是将你切换到命令模式。
n/vi没有"可视块"模式,这是vim特有的功能。 但由于自20世纪70年代以来,通过书签已经在vi中实现了类似的功能,所以我质疑为什么需要可视块模式。也许是为了那些实际上使用"列选择"功能的人?
不了解vi的标记和命名缓冲区,以及如何使用它们,说明人们根本没看过一些最基础的vi教程,这些教程早在80年代就存在,甚至都没读过man手册。
最后,对于所有认为"vi"存在于Ubuntu,或几乎任何GNU/Linux系统中的人们:
:version
这个名字几乎肯定是指向某个vim二进制文件的符号链接。
关于vi的所有这些信息现在已经公开可用了大约40年了。
-编辑- 我刚想到另外两种vim不符合POSIX vi的方式:
  1. CTRL+R预期重新绘制屏幕,而不是vim的“重做”
  2. Q(在某些vim版本中被完全禁用)应该将您切换回ex。