Vim 和 Emacs 的优缺点是什么?

Joh*_*man 406 vim emacs vi

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

[注意] 这不是由那些“恨一个和爱另一个”或那些没有使用过的人来回答的。

Gil*_*il' 452

我两个都用,不过如果我必须选择一个,我知道我会选择哪一个。尽管如此,我还是会尝试对一些问题进行客观的比较。

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

  • 臃肿?Emacs 曾经幽默地代表“八兆字节和不断交换”。现在,在我的机器上,谷歌浏览器每个标签需要的内存与 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 神话:模态编辑器使用起来并不困难或痛苦。这需要一点习惯,但过一段时间感觉很自然。如果我要重新设计 vi(m),我肯定会保留这些模式。

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

  • 生产力:这是一个非常难的话题。vi(m) 的支持者认为,你几乎可以在不离开主排的情况下做任何事情,这会让你在最需要的时候更有效率。Emacs 的支持者反驳说 Emacs 有很多不经常使用的命令,所以不保证键绑定,但是当你需要它们时非常方便(强制性的 xkcd 参考)。
    我个人的观点是,除非您有打字障碍,否则 Emacs 最终会获胜(即使这样,您也可以将 Emacs 配置为只需要键序列,而不需要像Ctrl+letter这样的组合)。Home 行键很好,但它们通常不是那么好,因为您必须切换模式。我不认为 Vim 可以做任何有意义的事情 比 Emacs 更有效,反之亦然。

  • 可定制性:两个编辑器都是可编程的,并且两者都有大量可用的包。然而,Vim 是一个带有宏语言的编辑器;Emacs 是一个用 Lisp 编写的编辑器,带有一些特别的原语。当您尝试做一些作者没有想到的事情时,Emacs 会取得惊人的胜利。这不会每天发生,但它确实会随着岁月的流逝而累积。

  • 不仅仅是一个编辑器:Vim 是一个编辑器。Emacs 不仅仅是一个编辑器:它还是一个 IDE、一个文件管理器、一个终端模拟器、一个网络浏览器、一个邮件客户端、一个新闻客户端……这是好事还是坏事,这是一个有争议的问题。但是您可以将 Emacs 用作纯粹的编辑器(请参阅上面的“功能膨胀”)。

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

    Emacs 明显优于 Vim 的一个领域是与异步子进程的交互。那是当您开始长时间编译并希望在编译器搅动时在同一编辑器实例中执行其他操作时。或者,当您想与Read-eval-print 循环进行交互时——Emacs 真的很擅长这一点,Vim 只能提供笨拙的技巧。尽管如此,一个新的 vim分支 Neovim已被证明已经解决了这个问题,并实施了其他各种未在库存 vim 中实施的错误修复。

  • 我不能同意“不仅仅是编辑”这一点。Vim 也有许多插件,包括将它变成文件管理器或 IDE(如 vim-latex)的插件。 (38认同)
  • @rozcietrzewiacz:是的,但是你可以在 Vim 中浏览网页吗?阅读电子邮件?检查您的 RSS 提要?我认为您不能否认 Emacs 只是更强大,尽管这种功能的有用性取决于您正在寻找什么。 (16认同)
  • 这让我觉得自己很渺小... (10认同)
  • @Bananguin Emacs 更擅长与 [REPL](http://en.wikipedia.org/wiki/REPL) 交互的任何事情。例如 [Proof general](http://proofgeneral.inf.ed.ac.uk/) 非常好(当然它是一个非常狭窄的应用领域)。Emacs 擅长做以前没人想到的东西:Emacs Lisp 比 Vim 的宏语言好得多。Emacs 往往对缩进源代码有更好的支持,但我认为这不是 Vim 的缺陷,因为缺少库(Vim 支持往往仅限于语法突出显示)。 (6认同)
  • @MichaelHampton 那你一定还年轻。[在 1985 年,它是 8 兆字节](http://www.gnu.org/fun/jokes/gnuemacs.acro.exp.html)。现在我想它应该是八千兆字节,除了没有人注意到 Emacs 的内存使用情况,因为它少于一个浏览器选项卡。 (5认同)
  • 你说'如果我必须选择一个,我知道我会选择哪一个'。那么你会选择哪一个呢? (3认同)
  • @musicfreak (http://vim.sourceforge.net/scripts/script.php?script_id=1053 http://vim.org/scripts/script.php?script_id=4315), (http://www.vim. org/scripts/script.php?script_id=1052, http://code.google.com/p/postmail-vim-plugin),可能类似于 http://stackoverflow.com/a/567512/805362 中的脚本. Vim 支持在 Python、Ruby、Lua 和 perl 中编写脚本,因此您几乎可以做任何您想做的事情。 (2认同)
  • 我不明白为什么人们想要使用“Emacs”进行浏览。I <CTRL><TAB> 并将焦点转到 Chromo 进行浏览。我从未尝试过 `Emacs`,但我不认为 `Emacs` 可以击败 Chrome :-) (2认同)
  • 顺便说一句,如果我们可以为其他任务(如 FTP、文件管理、音乐等)创建与主机的第二个连接,那么 emacs 是一切和一袋芯片的好处是什么? 一位德国同事(和我的前导师) ) 经常将这种工具描述为“eierlegende Wollmilchsau”——设计上毫无用处。https://en.wiktionary.org/wiki/eierlegende_Wollmilchsau (2认同)
  • 我认为值得注意的是 Emacs 包含启用 vim 键绑定的“Evil”模式。 (2认同)

Mic*_*zek 284

我将发布我认为每个的主要好处:


Emacs 有更多的扩展可以让你完成与文本编辑器相关的任务,比如浏览文件系统或搞乱版本控制,以及与文本编辑器无关的扩展,比如阅读 RSS 提要。如果你想要一个环境而不仅仅是一个文本编辑器,Emacs 会比 Vim 更好。我也认为 Emacs 更容易学习,尽管有些人会相信:

编辑学习曲线漫画

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


另一方面,Vim 无疑更快。这似乎是争论的核心部分,但在我看来根本没有竞争;我认为自己是一个流利的 Emacs 用户,我无法与我认识的对 Vim 有同等了解的几个人相提并论。问题是,足够精通 Vim 以达到如此快的速度的人数非常少(在我经常与之交谈的大约 30 人中使用 Vim,我认为只有一个人特别擅长)。可能的速度增益与您实现的实际速度增益之间存在很大差距;Emacs 用户几乎和 99% 的 Vim 用户一样快,而且(正如我在 Emacs 部分所说的)Emacs 用户可能比 Vim 用户更快

  • 这是一个“彻头彻尾的笑话”……这是因为当您学习 emacs 时,最终您也开始创建 emacs。(因为 Emacs 实际上只是用它的 Lisp 解释器编写的一个非常大的编辑宏/例程集合。) (31认同)
  • +1 你的速度 vs 经验很好,但也许 99% 有点极端。我的意思是 vim 并不“那么难”,只需要几年时间;) (15认同)
  • @xeno 我不知道 vim 有哪些插件,所以也许 VCS 是一个不好的例子,但我非常有信心 Emacs 的插件比 vim 多得多,因为 vim 不赞成“一个程序做所有事情”的理念 (13认同)
  • 嗯...我知道 vim 有不止一个版本控制插件。并且其中一个插件支持所有流行的系统......如果emacs 有更多......你需要多少个插件来做同样的事情? (9认同)
  • 有人能解释一下上面给出的 emacs 图是什么意思吗?如何解读? (4认同)
  • 我假设每个阅读这篇文章的人之前都会看到那个图表,但显然人们对我的印象 - 我没有,它非常有名并且一直出现在 vim 与 emacs 线程中。我认为原始来源是 http://blogs.msdn.com/b/steverowe/archive/2004/11/17/code-editor-learning-curves.aspx (2认同)

xen*_*ide 85

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

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

  • @phunehehe 如果我尝试使用 `nano`,我最终会在我的文件中得到一大堆 ijkloOah ......直到我意识到我不能使用它们进行导航。我不使用箭头键来导航。 (27认同)
  • @phunehehe 我不使用 esc。我使用 ctrl+[ 它做同样的事情;) (12认同)
  • +1 Gaurav 的评论。Vi 非常适合在慢速手机上通过糟糕的 3G 连接紧急编辑配置文件。 (8认同)
  • 通过狡猾的连接连接到慢速服务器时,这会加倍:他们保证拥有的一个编辑器(我认为它在 Unix 规范中?)当每次击键需要几秒钟才能出现在屏幕上时。当然,第 1 步通常是安装 `vim` :) (5认同)

fra*_*ous 25

我觉得他们两个都很棒。我认为任何一个都可以做你能想象的任何事情,而且它们都非常可定制,当你完成定制它们时,它们都正是你想要的样子,不多也不少。

Emacs 在我看来更接近(尽管仍然不满足)ISO/IEC 用户界面的可用性和一致性标准,因此不会像你对 vim 的“直觉”那样耍花招。您与其他程序一起开发的本能的一生不会对您不利。

Vim 是一个完全不同的模型,而且在很多方面,它本身是优越的,因为它对 Cntrl/Alt 序列的依赖要少得多,而只是依赖于它的模式,让您可以将精力放在主行和打字上快点。但是 vim 实际上是独一无二的,除非您安装了一些非常不寻常的附带软件(例如 Vimperator、Jumanji/Zathura 等),否则您使用 vim 开发的本能不会转移到其他程序上,反之亦然。也就是说,我自己已经选择了 vim。无论是好是坏,您迟早都必须选择一个,因为两者都很难掌握。


Eli*_*rey 22

我定期使用两者。我将 Emacs 视为“实时”编辑器,而我使用 Vim 来完成快速、一次性的任务。从表面上看,Emacs 比 Vim 臃肿得多,因此“启动”确实不像 Vim 那样方便,但我也发现从一个到另一个的用户界面哲学都支持这种范式。Emacs 更适合让你留在里面,让事情变得美好和舒适,所以你不必离开,而 vim 更“Unixy”,并将自己视为更大的工具带的一部分。

许多人因为 Emacs 对bucky bits 的严重依赖而逃离了它,但这对我来说是一个非常愚蠢的理由。Emacs 对 Vim 的真正力量是可定制性,而有了 Viper 等的强大功能,这真的不是问题。当然,Vim-Script 提供了它自己的定制级别,如果你最喜欢的编程语言没有提供合适的语法高亮器,你当然可以自己做一个,但 Emacs 最终是一个自托管的 lisp 机器,并且在最后你可以做很多,更多的摆弄。Vim中没有gnusorg-mode这样的工具,仅举几例。简而言之,Emacs 不仅仅是一个编辑器,它实际上是一个该死的操作系统。

对于操作文本,我会说它们完全相同。

  • “如果 Emacs 有一个值得一试的文本编辑器,它就会成为一个伟大的操作系统。” ——这句话让我想起了。 (32认同)

Con*_*lls 19

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

Emacs

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

  • 据观察,RMS 和其他一些著名的 Emacs 黑客由于 OOS 问题而不得不退出编程,Bill Joy、Bram Moolenaar 和其他各种 vi 名人仍在那里。Emacs 对你的小指来说很难。

  • Emacs 是一个比 vi 更宽容的系统,并且被视为软件封装的典型例子。与 Netscape 一起,这是jwz为证明该定律所做的贡献之一。

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

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

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

维姆

免责声明 - 大约 10 年前,我从使用 emacs 转向使用 vim,我习惯性地在基于 Windows 和 Unix/Linux 的系统上使用 vim。

  • Vi 及其后代具有用于自动编辑任务的非常好的键盘宏工具。vim 中的脚本编写工具不像 elisp 那样复杂,但是您可以在支持 Python、Tcl、Perl 和其他一些系统的情况下构建它。我只是偶尔为 vim 编写脚本(在 .vimrc 文件之外)。

  • Vim 的占用空间比 emacs 小,但现在这没什么大不了的。

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

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

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

缺点:对于习惯了 Windows UI 的人来说,模态用户界面感觉很奇怪。这些天,vim 的问题减少了。


Dav*_*ley 15

我通常使用 Vim,但他们都是很棒的编辑器。

学习使用 vi 很讨厌,但我熬过了它并学会了喜欢它。我最沮丧的时刻是大写锁定键打开的时候。您可以尝试使用 gVim,但 vi 和 Emacs 的最大优势之一是能够在将手放在键盘上的同时做一些整洁的事情,而 gVim 可能会让您继续使用鼠标。(同时学习玩 roguelike 游戏让我练习了光标移动键,但有时导致我尝试在文档中对角移动。)

Emacs 可能更平易近人。它是无模式的,你不会因为按下大写锁定键而把自己搞砸。通过按下控制键输入字母来控制编辑器的想法对于现代高级用户来说应该不会太陌生,尽管实际的操作键对于典型的 Windows/Mac OS X 用户来说似乎很狂野和随意。同样,从长远来看,允许您使用鼠标的版本对您没有什么好处。

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

两者都是可配置的,虽然我的钱在同一个 Lisp 中编写扩展,但编辑器是在其中编写的,这会带来更流畅的体验。(Emacs,作为正常分发的,并不是真正的编辑器。它是一个为文本处理量身定制的 Lisp 环境,有很多预先编写的软件,包括一个编辑器。因此笑话“Emacs 制作了一个不错的外壳,但它可以使用一个更好的编辑器。”)

我通常使用 Vim,因为经过大量培训后,感觉更容易了。这可能是由于模式系统的优势,在主行附近使用一根手指可以使用大量命令,或者“小鸭子综合症”,这非常适用于编辑:一旦你学会了一个好的,你通常会坚持到它。

使用两者都不会出错。


Den*_*son 9

我不使用 vi/vim 的主要原因是它是模态的。我使用 vi 的主要原因是它几乎随处可用。

  • 我使用 vim 的主要原因是它是模态的。更高的学习曲线,但一旦你习惯了它就更容易使用。 (12认同)

小智 9

由于没有明确说明,我将补充一点,没有比稍作修改的 Emacs 发行版更好的编程环境(盒装 Lisp、SLIME 等)。我所有的编程需求 (99%) 都在 Vim 内部完成,但对于我编写的所有 Lisp 库和例程,我必须启动 Emacs 才能完成任何富有成效的工作。

  • 有时我想知道这是否更多地说明了 Lisp 或 Emacs,以及这是好是坏... (8认同)

Bru*_*ger 9

我碰巧认为上面的“vim is modal”注释是不正确的。Vim 有命令。您可以执行“11aNow is the time for all good men..”并最终在您的文件中生成 11 行相同的新文本。那是命令,不是模式。但实际上 Vim 命令与 Emacs 命令之间存在非常基本的区别。我不完全确定我能描述它,但 Eric Fischer 10 多年前在 TTY 驱动程序中加入了 Emacs 风格的行编辑,并发表了一篇关于它的论文:

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

他发现 Emacs 风格的行编辑与 vi 风格有着根本的不同。

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

我应该注意到我个人一直在使用 Vim。我只是一个非常偶然的 Emacs 用户。

  • @BruceEdiger 我非常怀疑`mysql(1)`、`psql(1)`、`gnuplot(1)`、`python(1)`、`perlconsole(1)`、`lftp(1)`的开发者, `smbclient(1)` 和实际上很多交互式程序都关注行编辑的键绑定。所有这些软件都只使用 [GNU Readline](http://www.gnu.org/software/readline/),而 GNU Readline 的默认模式(不出所料)类似于 GNU Emacs。在你的`~/.inputrc` 中设置编辑模式 vi`,瞧——所有这些工具都有类似 vi 的键绑定。 (4认同)

pol*_*mon 8

我使用 Vim/gVim。

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

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

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

现在,它是一个混合物。我也经常使用 Eclipse 和 gedit。然而,Vim 仍然是我最喜欢和最常用的编辑器。


小智 7

我同时使用 gVim 和 Emacs 以提高工作效率,尽管我在这两个方面都不擅长。我可以肯定地说的一件事是 Vim 和 gVim 在我的 Windows 7 笔记本电脑上运行得更快(我必须在工作中使用)。在 Windows 机器上,Emacs 有一个奇怪的习惯,即“暂停”长达一分钟并且变得无响应,即使在继续接受键盘输入时,也会在匆忙吐出键盘缓冲区中积累的所有内容之前。这在 Mac OS 或 Linux 中不会发生。尽管如此,我发现自己大部分时间都在所有平台上使用 Vim 或 gVim,这样我就不必停下来思考我正在使用和调整哪个编辑器。也就是说,在纯粹的 *nix 环境中,我可能会继续使用 Emacs,因为我发现无模式编辑更自然一些。

底线:在我看来,这两个编辑器都足够强大,可以处理任何和所有文本编辑需求。选择应基于实际考虑(如平台实现细节)和工作风格。