Vi vs Vim,或者,为什么我会想要使用Vi?


84

我对* NIX文本编辑器(目前是从迁移nanovim)有所了解,并且在Unix&Linux SE上浏览了一下之后,在vi很多问题中都注意到它被用来代替'vim'。我知道'vim'代表'Vi IMproved',考虑到这一点,我想知道为什么有人宁愿使用vi代替vim。vi相对于vim有什么明显的优势吗?

编辑:我认为我的问题被误解了。我知道,在大多数情况下,vim比vi更加强大和功能完善。我想知道的是,在任何可能的情况下,vi都比vim更具优势,例如更少的内存使用,在* nix系统上的流行等。


25
有趣的vi是,您可以期望它可以在每个POSIX兼容系统上使用。
jordanm

1
实际上,Ubuntu标准安装包括但vi不包含vim.. Ubuntu是最用户友好的发行版之一;-)
amyassin

10
@amyassin这是不正确的,像大多数Linux发行版一样,Ubuntu也包含在内vimvi只是最终指向vim默认安装中的符号链接。
jlliagre

2
我的建议是:使用Vim,但要学习vi使用POSIX规范vi。这样,您不仅拥有可移植的知识,而且还了解Vim扩展。
通配符

1
@DDK您在我的声明中“最终”错过了。“ ls -l / etc / alternatives / vi”->“ lrwxrwxrwx 1 root root 2016年1月17日/ etc / alternatives / vi-> /usr/bin/vim.tiny”
jlliagre

Answers:


61

vi(也是)POSIX标准编辑器。有很多实现vim,至少在Linux上可能是最受欢迎的实现。

尽管许多符合Unix的传统操作系统都提供了vi非常接近于标准的实现,但是vim它增加了许多额外的功能,使其成为一把双刃剑。

当然,这些扩展通常旨在简化编辑过程并提供有用的功能。但是,一旦您习惯了其中的某些功能(不是语法着色等装饰性功能,而是那些改变了编辑器行为的修饰性功能),您就很容易忘记它们是特定的。并且使用其他实现,包括基于原始BSD代码的实现可能会非常令人沮丧。反之亦然。

这与使用非POSIX bashisms的脚本遇到更正统的shell实现(例如dash或)时发生的问题非常相似ksh


29

与vim相比,没有vi没有明显的优势,反之亦然。Vim比Vi具有更多优势。您可能对以下内容感兴趣:为什么哦,为什么## @!疯子使用vi?

编辑还读:学习VIM是否值得付出努力?


4
是的 我不使用任何IDE,因为它们强迫您使用的编辑器不是Vim。
Keith

1
@Keith我同时使用Xcode和Eclipse,但仍然只能使用vi进行编辑。
ott--

@Keith SlickEdit有一个很棒的Vim仿真,而IDEA越来越接近它了。此外,Visual Studio具有ViEmu。
demonkoryu

1
IntellIJ也有一个很好的vim插件,可以覆盖标准编辑器的行为。
JulienD

24

在用Vim舒适地进行编辑工作之后,我花了很大一部分时间(不包括童年),之后仅使用vi就花了大约一个月的时间。通过这样做,我意识到我一直依赖Vim来满足所有的文本修改需求。在进行vi之旅之前,每当我不得不替换一些文本或对一大堆文件执行类似的操作时,我都会在Vim中打开文件并运行:bufdo命令,并且每当我不得不缩进或格式化某些文件时,我会在Vim中打开它们,并使用Vim =gw命令。我是依赖Vim的。在意识到vi没有这些命令之后,我被迫使用进行批量文本转换,sed并学到了很多其他程序,例如awkindent。尽管最后我转回使用Vim,但是通过使用功能较弱的编辑器获得的知识却是丰富的,并且被证明是非常有用的。除了学习文本编辑器之外的工具外,我还对vi有了更好的了解。每当我在没有Vim的新系统或服务器上工作时,使用vi都会比一个月旅行前的感觉舒适得多。

另外,上个月,我在便宜的WM8650平板电脑上安装了Linux,发现Vim和vi之间存在明显的性能差异,因此我倾向于在平板电脑上使用vi。


3
我发现这是IT中的常见问题-这些工具可以帮助我们掩盖我们在学习中会变得更好的事情。
danno

事实上,在许多文件处理就地文件编辑不能可移植地使用awk或桑达做任何。(-i两者的开关都是GNU扩展。)但是您可以将它们可移植地与类似for f in *; do printf '%s\n' '%!sed -e '\''some sed command'\' x | ex "$f"; done
通配符

12

没有vim我将很难过日子,但我无法忍受vi。但是,学习前者至少会使您对如何处理后一种情况有个想法。

默认情况下,vim界面实际上与vi非常接近。如果我正在使用vim的系统上工作,那么我要做的第一件事就是将这些内容添加到~/.vimrc

syntax enable
set nocp
set wildmenu

我还喜欢一堆其他东西-nowrap和编号等等-但没关系。“ syntax enable”仅打开基本语法突出显示功能(更强大:filetype plugin on也是基本功能);“ nocp” 关闭了vi的兼容性,正是这开始使vim与旧的vi区别开来(例如,启用showmode它会使整个体验更加人性化,因为您现在可以知道是在命令中还是〜INSERT〜模式)。“ wildmenu”仅在执行某些操作时为您提供水平完成菜单,这也使生活更加轻松。

vim 的文本编辑功能是首屈一指的-除了emacs之外,我从未见过或听说过一款与之接近的软件。它们不容易学习,但是一旦您知道它们,它们的使用速度将比鼠标菜单快得多,并且比基于鼠标菜单的界面中的简单按键宏替代品更具动态性。对于编程,有时我将vim与Eclipse等IDE一起使用,但是我在vim中完成了大部分工作。

如果您走那条路,大声笑,请查看自动补全和标签列表插件。并提防阴暗面。


我也总是加set mouse=a
ott--

关于您的编程注释,您可能会发现eclim有趣...
ire_and_curses

@ire_and_curses:还没有尝试过。Eclipse和vim都监视源文件并允许它们在外部进行更新,并且从一个桌面切换到另一个桌面就是从一个桌面切换到另一个桌面。似乎很想法。
goldilocks

尽管我不认为这个答案应该是选择的答案(因为它是有偏见的),但正是这种观点类型有助于理解差异。感谢您的职位。
日内瓦2015年

8

优点是vi通常预装在企业UNIX(如AIX或Solaris)中。此外,在安装介质上无法访问vim。


1

我已经注意到,我只是选择ViVIM当我复制和粘贴,我是用一个文本文件或配置文件中cat的命令。这是因为当我尝试ctrl-c,然后ctrl-v进入VIM打开的文档,它迫使所有线路都对他们有意见盈。所以,当我使用Victrl-vpaste进入Vi打开的文档,它粘贴正是我从复制。除此之外,我VIM整日使用。

请享用!


5
试试:set paste
Patrick

3
在.vimrc中设置pastetoggle = <F2>(vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste
Dave

1

正如前面的答案已经提到的那样,vi几乎与每个UNIX系统一起提供。

我只是想添加一个例子。Arch Linux是一种特别流行且轻量级的发行版,默认情况下,Installer或基本发行版都不随vim一起提供,但均随vi一起提供。

本身就不是vi的优势,因为您可以简单地手动安装vim,而在需要文本编辑器的安装过程中您几乎不需要完成任何工作,而vim在预期的目的上要优于vim。但是了解它们之间的区别以及与vim相比,vi更普遍,更轻量级确实给了它一些利基优势。

同样,只是为了全面,还没有人明确提到vi是vim的直接前身。Vim的目标是成为Vi的一切,甚至更多。

因此,以一种非常直接的方式,vim优于vi,因为它被设计为


1

在vim上使用vi的唯一原因是您别无选择。

vim代表“ vi有所改善”的原因有很多!

从相关的帖子中借来的我回答:-

  1. 多个窗口-水平,垂直和选项卡。
  2. 视觉突出显示。
  3. 通过:help命令的在线帮助。
  4. 将宏记录到可以执行的寄存器中。
  5. 撤消(和重做)多次,而不是老vi疯狂的撤消切换。
  6. 命令行历史记录,搜索历史记录。
  7. 嵌入了完整的语言以及许多可用功能,例如getcwd()
  8. 大大扩展了模式匹配。
  9. 通过ctrl-P和ctrl-N完成单词。
  10. 内置的文件导航器(有点笨重,但可能很有用)。
  11. ESC键实际上会退出您试图逃避的命令,而不是像vi那样(疯狂地)运行它们。
  12. 能够通过bufdo,argdo和windo在所有缓冲区,args或Windows上运行命令。

您可能已经提出了在unix.stackexchange.com/a/425597/85039答案中提到的“许多很多”原因。那会使这个答案好一些;否则,它看起来更像是评论,而不是实际答案
Sergiy Kolodyazhnyy

点了。答案已更新,借鉴了我​​昨天做的一个相关答案。
Paul T

1

这是Vim Koans的摘录:

Wq大师和Unix大师

一个老的Unix大师来到Master Wq。“我很烦,Wq。您教Vim的方式。vi是圣洁的,但Vim不是;它的代码无处不在,它的特点是可以存储内存;它的二进制文件很大,行为不一致。这不是Unix的方法。我担心你会误导学生。该怎么办?”

Wq大师点点头。“你是对的,”他说。“ Vim坏了。让我们修复它。让我们开始?”

老Unix大师同意了,并打开了一个外壳。他键入:

$ vi vim.c

他开始编码。Wq大师看了一会儿,然后问他:“您使用哪个vi的实现?Nvi?Vim?猫王?”

“我不知道,” Unix大师说。“没关系。”

Wq大师点点头。Unix大师呆呆了片刻,关闭了未保存的文档。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.