您如何比较这些编辑器?各自的优点和缺点是什么?
[笔记] 这并不意味着那些“恨一个又爱另一个”或没有使用过两者的人来回答。
答案1
我两者都用,但如果我必须选择其中之一,我知道我会选择哪一个。不过,我还是会尝试就几个问题进行客观的比较。
随处可用?如果您是使用 Unix 系统的专业系统管理员,或者是嵌入式设备(路由器、带有 Busybox 的智能手机等)的高级用户,您需要了解 vi(不是 Vim),因为它可在所有 Unix 系统和大多数操作系统上使用。类 Unix 系统,无论是桌面、服务器还是嵌入式。对于普通用户来说,这个论点是无关紧要的:Emacs 可以轻松地用于每个桌面/服务器操作系统,并且由于它支持远程编辑,所以无论如何将它放在您的桌面计算机上就足够了。
臃肿?Emacs 曾经幽默地代表“八兆字节并不断交换”。现在,在我的机器上,Google Chrome 每个选项卡所需的 RAM 大约与 Emacs 处理 100 个打开文件所需的 RAM 一样多,我什至不会提及 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/null
对比emacs -q
)。不可否认,这是在一个奇怪的平台(Cygwin)上。初始学习曲线:这因人而异。Michael Mrozek 的图表让我笑了。说真的,我同意 Vim 的学习曲线一开始就很陡峭,比任何其他编辑器都陡峭,尽管可以通过使用 gvim 来减轻这种情况。
既然我已经消除了一些关于 Emacs 的误解,那么让我来消除一个关于 vi 的误解:模态编辑器使用起来并不困难或痛苦。这需要一点习惯,但过了一段时间就会感觉很自然。如果我要重新设计 vi(m),我肯定会保留这些模式。
渐近学习曲线:Vim 和 Emacs 都有很多功能,经过多年的使用你会不断发现新的功能。
生产率: 这是一个非常难的话题。 vi(m) 的支持者认为,你可以在不离开主排的情况下完成几乎所有事情,这会让你在最需要的时候变得更有效率。 Emacs 的支持者反驳说,Emacs 有很多不经常使用的命令,因此不需要键绑定,但是当你需要它们时却非常方便(强制性 xkcd 参考)。
我个人的观点是,除非您有打字障碍,否则 Emacs 最终会获胜(即使如此,您也可以将 Emacs 配置为仅需要按键序列,而不需要像Ctrl+ 字母这样的组合)。主行键很好,但它们通常并不是那么成功,因为你必须切换模式。我认为 Vim 无能为力显著地比 Emacs 更高效,反之亦然。可定制性:两个编辑器都是可编程的,并且都有大量可用的软件包。然而,Vim 是一个带有宏语言的编辑器; Emacs 是一个用 Lisp 编写的编辑器,带有一些临时原语。当您尝试做一些作者没有想到的事情时,Emacs 会取得惊人的胜利。这种情况并不是每天都会发生,但确实会随着时间的推移而积累。
不仅仅是编辑:Vim 是一个编辑器。 Emacs 不仅仅是一个编辑器:它还是一个 IDE、文件管理器、终端仿真器、Web 浏览器、邮件客户端、新闻客户端……这是好事还是坏事尚有争议。但您可以将 Emacs 用作纯粹的编辑器(请参阅上面的“功能膨胀”)。
作为一个IDE:Vim 和 Emacs 都支持很多编程语言和其他文本格式。除了语法着色和自动缩进等基础功能之外,两者还具有高级 IDE 功能,例如代码和文档交叉引用查找、辅助插入和重构、集成版本控制以及启动编译和跳转到第一个错误的能力。
Emacs 明显优于 Vim 的一个领域是与异步子流程。当您开始长时间编译并希望在编译器运行时在同一个编辑器实例中执行其他操作时。或者当你想与某个人互动时读取-求值-打印循环— Emacs 在这方面确实很出色,Vim 只能提供一些笨拙的技巧。尽管如此,vim 的一个新分支,尼奥维姆已证明已经解决了这个问题,并实现了其他各种 bug 修复,这些错误修复在普通 vim 中未实现。
答案2
我将发布我认为每个的主要优点:
Emacs 有相当多的扩展,可让您执行仅与文本编辑器模糊相关的任务,例如浏览文件系统或搞乱版本控制,以及与文本编辑器无关的扩展,例如阅读 RSS 提要。如果你想要一个环境而不仅仅是一个文本编辑器,Emacs 会比 Vim 更好。我还认为 Emacs 更容易学习,尽管有些人会让您相信:
特别是,我认为 Emacs 新手用户会比 Vim 新手用户更快
另一方面,无可否认,Vim 更快。这似乎是争论的核心部分,但在我看来,根本没有争议;我认为自己是一个熟练的 Emacs 用户,但我无法与我认识的对 Vim 有同等了解的几个人相比。问题是,能够如此快地掌握 Vim 的人数量非常少(在我经常交谈的大约 30 名使用 Vim 的人中,我认为只有一个人特别擅长)。之间有很大的差距可能的速度增益和实际的您获得的速度增益; Emacs 用户的速度几乎与 99% 的 Vim 用户一样快,并且(正如我在 Emacs 部分中所说的)Emacs 新手用户可能会比 Vim 新手用户更快
答案3
每个(或几乎)Unix 系统上都有一个vi
可用的编辑器,但是您不能对任何其他编辑器这么说。在我看来,这是学习和熟悉的第一大原因vi
(请注意“vi”而不是“vim”)。我从未见过 Emacs 在默认安装中可用。
我并不是说不要使用 Emacs 或者这是使用 Vim 的唯一原因,但是当您希望能够使用不属于您的 Unix 系统时……vi
这是通用语言的一部分。
答案4
我经常使用两者。我将 Emacs 视为一种“实时”编辑器,而我使用 Vim 来完成快速、一次性的任务。从表面上看,Emacs 比 Vim 臃肿得多,因此它确实不像 Vim 那样方便“启动”,但我也发现从一个到另一个的用户界面哲学都支持这种范例。 Emacs 更适合让你呆在里面,让一切变得美好而舒适,这样你就不必离开,而 vim 则更加“Unixy”,并将自己视为更大工具带的一部分。
许多人因为 Emacs 的严重依赖而逃离它巴基比特,但这对我来说是一个相当愚蠢的理由。 Emacs 相对于 Vim 的真正强大之处在于可定制性,而有了 Viper 等的强大功能,这确实不是问题。当然,Vim-Script 提供了自己的定制级别,如果您最喜欢的编程语言没有提供适当的语法荧光笔,您当然可以编写一个,但 Emacs 归根结底是一个自托管 lisp 机器,并且在最后你可以做更多、更多的摆弄它。只是没有这样的工具牛羚或者组织模式在 Vim 中,仅举几例。简而言之,Emacs 不仅仅是一个编辑器,它实际上是一个该死的操作系统。
对于文本操作,我想说它们完全不相上下。