it-swarm.cn

Vim和Emacs的优缺点是什么?

您将如何比较这些编辑器?各自的优缺点是什么?

[note]那些“讨厌一个人而爱另一个人”或没有使用两者的人并不想回答。

388
John Berryman

我同时使用这两种方法,尽管如果必须选择一种,我知道我会选择哪一种。不过,我将尝试在一些问题上进行客观比较。

  • 是否随处可见?如果您是使用Unix系统的专业系统管理员,或者是嵌入式设备(路由器,带有Busybox的智能手机等)上的高级用户,... ),您需要了解vi(不是Vim),因为它在所有Unix系统和大多数类Unix系统上都可用,无论是台式机,服务器还是嵌入式。对于普通用户而言,该参数是无关紧要的:Emacs可以轻松地用于每个台式机/服务器操作系统,并且由于它支持远程编辑,因此无论如何都可以在台式机上使用它。

  • 膨胀了吗?Emacs曾幽默地代表“八兆字节并不断交换”。现在,在我的计算机上,Google Chrome每个选项卡所需的RAM每个选项卡与Emacs一样需要处理100个打开的文件,我什至不会提到Firefox在21世纪,Emacs膨胀只是一个神话。

    特征膨胀也不是问题。如果您不使用它,则不必知道它的存在。当您不使用Emacs功能时,它们将不受影响,并且文档井井有条。

  • 启动时间:Vi(m)的支持者抱怨Emacs的启动时间。是的,Emacs的启动速度很慢,但这没什么大不了的:每个会话一次启动Emacs,然后使用emacsclient连接到正在运行的进程。因此,Emacs的缓慢启动主要是神话。

    有一个例外,那就是当您登录到远程计算机并想在那里编辑文件时。启动远程Emacs通常比启动远程Vim慢。在某些情况下,您可以使Emacs在Screen内运行。您也可以从Emacs中编辑远程文件,但是如果您在终端中的ssh会话中,它确实会中断流程。 (由于XEmacs 21或GNU Emacs 23,因此您可以从终端内正在运行的X实例中打开Emacs窗口。)

    转过桌子,我发现Vim的加载时间比Emacs(vim -u /dev/nullemacs -q)。诚然,这是在一个奇怪的平台(Cygwin)上。

  • 初始学习曲线:这因人而异。 Michael Mrozek的图表 使我发笑。认真地说,我同意Vim的学习曲线比其他任何编辑器都要陡峭,尽管可以使用gvim减轻这种情况。

    由于我消除了Emacs的两个神话,因此让我消除一个视觉上的神话:模式编辑器使用起来并不困难或痛苦。它有一点习惯,但过了一会儿感觉很自然。如果要重新设计vi(m),我肯定会保留这些模式。

  • 渐近学习曲线:Vim和Emacs都有很多功能,使用多年后,您会不断发现新功能。

  • 生产力:这是一个非常困难的话题。 vi(m)的支持者认为,您几乎可以做任何事情而无需离开起始行,这使您在最需要的时候效率更高。支持Emacs的人反驳说Emacs有很多不经常使用的命令,因此不必保证键绑定,但是在需要它们时非常方便( 必填xkcd参考 )。
    我个人的观点是,除非您有打字障碍,否则Emacs最终会获胜(即使如此,您也可以将Emacs配置为仅要求按键序列,而无需诸如 Ctrl+字母)。 Home row键是不错的选择,但是它们通常并不能胜任很多,因为您必须切换模式。我不认为Vim可以比Emacs更有效地做任何事情,而事实恰恰相反。

  • 可定制性:两种编辑器都是可编程的,并且两者都有大量可用的软件包。但是,Vim是使用宏语言的编辑器。 Emacs是用LISP编写的带有一些特定原语的编辑器。当您尝试做一些作者没有想到的事情时,Emacs会获得惊人的胜利。这并非每天都会发生,但多年来会不断累积。

  • 不止是编辑器:Vim是编辑器。 Emacs不仅是一个编辑器:它还是一个IDE,一个文件管理器,一个终端仿真器,一个Web浏览器,一个邮件客户端,一个新闻客户端,……这是好事还是坏事都需要辩论。但是您可以将Emacs用作单纯的编辑器(请参见上面的“功能膨胀”)。

  • 作为IDE:Vim和Emacs都支持许多编程语言和其他文本格式。除了语法着色和自动缩进之类的基础知识之外,它们都具有高级IDE功能,例如代码和文档交叉引用查找,辅助插入和重构,集成版本控制以及启动文本的功能。编译并跳转到第一个错误。

    Emacs比Vim更好的一个域是与异步子进程的交互。那是当您开始长时间编译并希望在编译器搅动时在同一编辑器实例中执行其他操作时。或者,当您想与 Read-eval-print循环 进行交互时-Emacs确实对此颇有启发,Vim仅提供笨拙的骇客。尽管如此,事实证明,新的vim分支 (Neovim )已解决此问题,并实现了其他在Vim中未实现的各种错误修复。

429

我将发布我认为每种方法的主要优点:


Emacs具有更多的扩展,可让您执行与文本编辑器无关的任务,例如浏览文件系统或弄乱版本控制,而扩展则与文本编辑器无关,例如阅读RSS feed。如果您想要一个环境而不只是一个文本编辑器,那么Emacs将比Vim更好。我也认为Emacs更容易学习,尽管您会相信其中的一些:

Editor learning curve comic

特别是,我认为Emacs新手用户将比Vim新手用户快


另一方面,Vim无疑是更快的。看来这是争论的核心部分,但我认为根本没有竞争。我认为自己是流利的Emacs用户,对于我认识的对Vim具有同等认识的夫妻,我无法匹敌。问题是,对Vim掌握足够多的知识的人非常之少(在我经常与之交谈的约30个人中,使用Vim的人当中,我认为只有一个非常擅长此事)。 可能的速度增益和实际速度增益之间有很大的差距你实现; Emacs用户将几乎与Vim用户的99%一样快,并且(正如我在Emacs部分中所述),Emacs的初始用户可能会比Vim的初始用户快

272
Michael Mrozek

每个unix系统(或几乎)上都有vi,但是您不能对其他任何编辑器这么说。这是imo学习和熟悉vi的#1原因(请注意,“ vi”而不是“ vim”)。我从未见过Emacs在默认安装中可用。

我并不是说不要使用Emacs或这是使用Vim的唯一原因,但是当您希望能够使用不是您自己的Unix系统时... vi是通用的一部分语言。

83
xenoterracide

我认为他们都很棒。我认为任何人都可以做您可以想象的任何事情,而且它们都可自定义,以至于您完成自定义它们时,它们都恰好就是您想要的它们,没有更多或更少。

Emacs在与用户界面的可用性和一致性的ISO/IEC标准更加接近(尽管仍然不满足)的情况下在我看来是突出的,因此,您对该vim的“直觉”没有那么多花招。您与其他程序一起开发的本能一生将不会对您不利。

Vim是一个完全不同的模型,在许多方面,它本身都具有优势,因为它很少依赖Cntrl/Alt序列,而是仅依赖于其模式,从而使您可以轻松地在主行和打字上快点。但是vim实际上是唯一的,除非您安装一些非常不寻常的随附软件(例如Vimperator,Jumanji/Zathura等),否则使用vim开发的本能将不会渗透到其他程序中,反之亦然。话虽如此,我已经自己决定了。无论好坏,您都迟早要安顿下来,因为很难同时掌握两者。

24
frabjous

我经常使用两者。我将Emacs视为“实时”编辑器,而我将Vim用于快速的一次性任务。从表面上看,Emacs比Vim更肿,因此“启动”确实不像Vim那样方便,但是我还发现,从一个界面到另一个界面的用户界面哲学都支持这种范例。 Emacs的功能更强大,可以使您保持内部状态,使事情变得舒适舒适,因此您不必离开,而vim则更像是“ Unixy”,并且将自己视为更大的工具带的一部分。

许多人由于严重依赖 bucky bits 而逃离了Emacs,但这对我来说是一个很愚蠢的原因。 Emacs对Vim的真正威力是可定制性,而在Viper等威力的支持下,这确实不是问题。当然,Vim-Script提供了自己的自定义级别,例如,如果没有为您喜欢的编程语言提供适当的语法突出显示功能,则可以肯定使用它,但是Emacs最终是一台自托管的LISP机器,并且最终,您可以做更多,更多的事情。仅举几个例子,在Vim中没有 gnusorg-mode 这样的工具。简而言之,Emacs不仅仅是一个编辑器,它实际上是一个该死的操作系统。

对于处理文本,我想说它们完全一样。

21
Eli Frey

我花了0.02美元,因为我花了很多年时间使用emacs和XEmacs,然后才转到vim。公平地说,我实际上在1990-1992年左右使用了vi,所以我熟悉它的用户界面。

Emacs

  • Emacs被描述为一个LISP系统,它刚好被用来编写编辑器,这是有道理的。如果您愿意花时间了解环境,那么您几乎可以在elisp中实现任何您想要的东西。我不能说我曾经非常了解它,但是我偶尔会做些粗暴的事。 Emacs和Xemacs在此级别上并不完全兼容,因此第三方脚本可以在一个脚本上运行,但不能在另一个脚本上运行。

  • 据观察,由于OOS的问题,RMS和其他一些著名的Emacs黑客不得不退出程序设计,而Bill Joy,Bram Moolenaar和其他各种名人仍然在使用它。用力地握住小指。

  • Emacs是比vi更天主教的系统,被视为 软件封装 的典型示例。与Netscape一起,这是证明该定律的 jwz's 之一。

我曾经对xemacs做过的一件独特的事情是让它在计算机上运行,​​并在同一个正在运行的实例上的同一个缓冲区的不同房间的xterminal(实际上是旧用途的Sun 3/60)上打开x会话。

优点:可扩展,比人类已知的任何其他编辑器功能更强大,并且可以与几乎所有主要的免费软件编程工具集成在一起。

缺点:符合人体工程学的问题,elisp不易学习。

Vim

Disclamer-大约10年前,我从使用emacs转到vim,我习惯在基于Windows和Unix/Linux的系统上使用vim。

  • Vi及其后代具有很好的键盘宏功能,可以自动执行编辑任务。 vim中的脚本工具没有elisp复杂,但是您可以通过支持Python,Tcl,Perl以及其他一些系统来构建它。我只是偶尔为vim编写脚本(.vimrc文件之外)。

  • 与emacs相比,Vim的占用空间较小,但是如今这并不是什么大问题。

  • Vim的文档和在线帮助都相当不错。 Emacs有相当不错的在线文档,但是我不认为它像vim一样全面。

  • Vim继承了vi的古怪的模态用户界面,但是现在可以像无模编辑器一样工作,因为您可以在插入模式下导航。在Windows上,它的行为与Windows应用程序非常相似。

优点:良好的键盘宏功能,良好的可扩展性和脚本编写能力,但不及emacs。 Vim或vi派生的编辑器是大多数(如果不是全部)Unix或通用Linux发行版的标准配置。可以说是更好的人体工程学。

缺点:模态用户界面让习惯于Windows UI的人感到很奇怪。如今,vim的问题越来越少了。

19
ConcernedOfTunbridgeWells

我通常使用Vim,但它们都是出色的编辑器。

学会使用vi是一件令人讨厌的事,但是我通过了学习并学会了喜欢它。我最沮丧的时刻是当按下Caps Lock键时。您可以尝试使用gVim,但是vi和Emacs的最大优势之一就是可以将整齐的东西放在手,同时又可以将手放在键盘上,而gVim可以让您继续使用鼠标。 (学习同时玩roguelike游戏为我提供了使用光标移动键的练习,但有时会导致我尝试在文档中沿对角线移动。)

Emacs可能更容易接近。它是无模式的,并且您不会通过按大写锁定键来搞砸自己。对于现代高级用户来说,通过按下控制键的方式键入字母来控制编辑器的想法对现代高级用户来说应该不太陌生,尽管对于典型的Windows/Mac OS X用户而言,执行操作的实际键似乎是疯狂的和任意的。同样,从长远来看,允许您使用鼠标的版本不会给您带来什么好处。

两者都需要一定程度的专业知识才能有效使用。与记事本不同,您不能坐下来进行编辑。

两者都是可配置的,尽管以我的金钱在同一LISP中编写扩展程序,但编写编辑器可以使操作更流畅。 (Emacs并不是通常的编辑器,它实际上是一个编辑器。它是一个LISP环境,专门为文本处理量身定制,带有许多预先编写的软件,包括编辑器。更好的编辑器。”)

我通常使用Vim,因为经过广泛的培训,它会变得更容易。这可能是由于模式系统的优势,在这种模式下,用一根手指在主行附近可以使用大量命令,或者称为“鸭蛋综合症”,这在编辑人员中非常有用:一旦您学到了好命令,通常就可以坚持下去对它。

使用任何一个都不会出错。

15
David Thornley

我碰巧认为上面的“ vim是模式的”注释是不正确的。 Vim有命令。您可以执行“ 11aNow现在是所有好男人的时候了..”,最后在文件中添加11行相同的新文本行。那是命令,而不是模式。但是,实际上Vim命令与Emacs命令之间存在非常基本的区别。我不确定是否可以描述它,但是10年前Eric Fischer在TTY驱动程序中结合了Emacs风格的行编辑,并发表了一篇有关它的论文:

http://www.usenix.org/event/usenix99/full_papers/fischer/fischer.pdf

他发现Emacs样式行编辑与vi样式根本不同。

因此,Emacs具有一个优势,很多其他东西(bash,gnuplot,zsh,ksh和其他我无法想到的东西)最终都实现了Emacs风格的行编辑。

我应该注意,我一直都在使用Vim。我只是偶尔使用Emacs的用户。

9
Bruce Ediger

由于尚未明确说明,因此我要补充一点,没有比经过稍微修改的Emacs发行版更好的编程环境(盒子中的LISP,SLIME等)。我所有的编程需求(99%)都在Vim中得到满足,但是对于我编写的所有LISP库和例程,我都必须启动Emacs才能完成工作。

9
Shamster

我不使用vi/vim的主要原因是它是模态的。我使用vi的主要原因是它几乎可以在任何地方使用。

9

我使用Vim/gVim。

我曾经使用过Emacs,但是我发现gVim在较慢的机器上通常可以更快地工作,此外,由于其POSIX要求,几乎在任何地方都可以使用vi。

当使用Vim或gVim时,我经常使用鼠标,我认为它的支持很棒。

我开始使用Emacs,因为它对于新手用户更容易使用。由于某种原因,我发现使用nano很容易出错,并且在某个时候,我意识到使用vi更舒服。

现在,这是一种混合。我也经常使用Eclipse和gedit。但是,Vim仍然是我最喜欢和最常用的编辑器。

8
polemon

尽管我都不擅长使用gVim和Emacs,但它们都足以发挥作用。我可以肯定地说的一件事是,Vim和gVim在Windows 7笔记本电脑上运行得更快(我必须在工作中使用它)。在Windows机器上,Emacs有一个奇怪的习惯,即即使在继续接受键盘输入的同时,也要“暂停”一分钟直到变得无响应,然后才在Rush中吐出键盘缓冲区中累积的所有内容。在Mac OS或Linux中不会发生这种情况。尽管如此,我发现大部分时间我都在所有平台上使用Vim或gVim,所以我不必停下来思考使用和调整的编辑器。就是说,在纯* nix环境中,我可能会留在Emacs上,因为我发现无模式编辑稍微自然一些。

底线:在我看来,两个编辑器的功能都足以应付任何和所有文本编辑需求。该选择应基于实际考虑因素(例如平台实现细节)和工作方式。

7
Wing Flanagan

Emacs和Vim之间的主要区别是人体工程学。如您所知,有腕管综合症。如果您拥有CTS并提倡CTS,Emacs将会非常“危险”。 Vim-不,您可以在许多地方了解到这种差异。例如,在Vim中,您只能用一根手指编辑文本。在Emacs中-您不能:)

3
Paul