Emacs和Vim的区别

没有深入探讨为什么比另一个更好的宗教争论,Emacs和Vim之间的实际区别是什么? 我正在寻找一个或另一个,但我意识到每个人的学习曲线很高,我不能决定。 我从来没有使用这种types的编辑器(我一直使用IDE),所以任何帮助新手的东西都是一个优点。


在火焰战争开始之前: 我不是问哪个更好,我是问两者之间的差异。 我想要一个客观的比较。 谢谢。

(以下文字是我的意见,不应视为事实或侮辱)

有了Emacs,您可以全天候使用它,并且可以在程序中生活,几乎所有的事情都可以从这里完成。 您可以编写自己的扩展名,用于logging笔记,组织,游戏,编程,shell访问,文件访问,收听音乐,浏览网页。 这需要花费数周和数周时间,直到你满意为止,然后你会一直学习新的东西。 当你无法访问它并不断改变你的configuration时,你会感到恼火。 您将无法轻松使用其他人的emacs版本,并且不会被安装。 它使用Lisp,这是伟大的。 你可以把它变成任何你想要的东西。 (任何东西)

用vim,几乎总是预装的。 它很快。 你打开一个文件做一个快速编辑,然后退出。 如果你在别人的机器上,你可以使用基本的设置。 这不是很可编辑的; 但它仍然比大多数文本编辑好得多。 它认识到,大部分时间你正在阅读/编辑不打字,并使这一部分更快。 你不会从emacs小指挨打 。 这不是真气。 这很容易学习。

即使我每天都在使用Emacs(并且喜欢它),除非您打算花费大量的时间在您select的程序中,我会selectvim

Vim不是一个shell。 它不能很好地与子stream程进行交stream。 这几乎是通过devise,在Emacs中,这些元素被包含在devise中。 这意味着一些东西,比如embedded一个debugging器或者一个intepreter(产生一种IDE),在Vim中是很难的。

而且,Emacs的快捷键主要是通过修饰符来访问的,显然Vim的界面是模式化的,可以访问荒谬的直接键进行操作。

Emacs曾经是这两者中唯一可编程的编辑器,虽然Vim有很多奇怪的可编程性,但是增加了Python和Ruby绑定(以及更多,我忘了),Vim也是可编程的你会在乎的。

我使用Vim,对此我感到非常满意。

Vim的:

  • 作为一个简单的编辑器更好(简单任务所需的键较less)
  • 更活跃的脚本社区 – 内部语言:vimscript
  • 一个脚本,插件,配色scheme的中央资料库…
  • 也可以在python,ruby中扩展
  • 可以做成便携式(emacs有一些问题)

Emacs的:

  • 非默认情况下(大多数今天的编辑采取了这种方法)。 虽然有模仿vim行为的邪恶模式 。
  • 更强大的语言来扩展它(elisp是一个全面的语言,在emacs中,你可以重新定义所有的东西;而在vim中,你不能重新定义在编辑器的function中的构build;在下面,vimscript和现在的dynamic语言比较相似,而elisp几乎不像任何东西)
  • 更可扩展
  • 对GNU工具(它们的一大堆)的优秀支持

就个人而言,我更喜欢vim – 它很小,做它应该做什么,当我希望一个完整的IDE我打开VS. 作为一个想成为一个IDE(或者我应该说,一个操作系统)编辑器的Emacs的方法,但不是完全是,恕我直言,过时了。 在过去有一个电子邮件客户端,FTP客户端,俄罗斯方块,…在一个包(Emacs)没有什么意义…现在,它不再了。

然而,这两者都是程序员和超级用户社区用户之间进行宗教讨论的话题,在这方面,如果联系起来(在同一个句子/问题中),两者都是非常好的启动火焰战争的。

如果您正在寻找对这两位编辑的客观分析,请看他们的起源和各自devise背后的理念。 想一下,哪一个更适合你,并学习它(学习它并学习它,因为在你发现它的真实效用之前需要时间,而不是任何IDE)。 “用Vi显示编辑介绍”由Bill Joy和Mark Horton撰写,他解释了为什么他select模式devise和各种关键笔划的基本原理(它帮助我记住CTRL-W + W(将切换到下一个W indow将同样为CTRL W + CTRL W,以防万一你长时间保持CTRL键。

这里是Emacs时间线的链接,并且提供了Multics Emacs文件。 这里是关于Emacs的 RMS论文,在那里我看到压力是在一个可编程的文本编辑器(甚至在1981年和之前)。

我还没有阅读emacs的文章,但是已经阅读了Bill Joy的vi文章几次。 两者都是旧的,但你仍然会得到这个理念,你可能会select使用当前的工具(vim 7.x或emacs 25?)

编辑:我忘了提及阅读这两篇论文需要耐心和想象力,因为它在阅读时需要时间。 但这是值得的。

  1. Vim总是比Emacs启动起来要快。 我想说的是,在任何机器上,Vim的开箱即用的安装将比Emacs的开箱即用的安装更快。 而且我倾向于认为在经过适度的定制之后,Vim仍然会比Emacs更快地启动。

  2. 之后,另一个实际的区别是Emacs的模式。 在编辑XML,C / C ++ / Java /其他,LaTeX以及您能想到的大多数stream行语言时,它们使您的生活变得非常容易。 他们让你想让编辑长时间的工作和工作。

总而言之,我会说Vim会为你做短暂而快速的编辑任务。 而Emacs则鼓励您长时间潜水。

VI总是可用,并且将运行在最残缺的单用户模式,破碎的graphics,没有键盘映射,慢速链接机器 – 所以它是值得知道如何编辑简单的文件,只是为了系统pipe理员的任务。

Emacs是一个编辑器中的完整用户界面。 这个想法是,当你启动机器时,你启动了Emacs并且永远不会离开它。 有可能有数以千计的会议在场。

与使用GUI编辑器/ IDE相比,学习Emacs的function是否值得,而使用python / awk / etc等来完成额外任务则取决于您。

我是一个成熟的Emacs粉丝男孩,但是早在我知道Emacs之前我就知道了VI。 这就是说,我让所有的人都学习VI,因为它随处可见。 他们中的任何一个都不会出错。

我从vi开始,去了emacs,然后到vim。 我一直在考虑尝试Emacs,看看过去五年发生了什么变化。 (说到IDE的,我已经进入了Eclipse一段时间,但我更喜欢我的terminal窗口连接我的Mac到我(丈夫的)Linux的盒子)。

最近剪贴的东西一直困扰着我。 在Vim中剪切和粘贴需要比Emacs,IIRC更多的步骤。 从一个浏览器粘贴到terminal窗口,除非你做一些我不想做的事情,否则我会忍受这个奇怪的缩进。 我认为,在emacs中编辑多个文件比较容易。 至less从一个文件跳到另一个文件,如果你把它们都放在屏幕上。

我还没有玩过vi或emacs的奇特function,因为我只是喜欢编码的业务。 所有我需要的是漂亮的颜色和适当的选项卡空间转换(特别是与python重要)。

我想这一切都取决于如果你想使用:wqCtrl-x Ctrl-s (IIRC)来保存文件,如果你不关心花哨的东西。

@ mgb是正确的。 在Debian发行版中,我已经在最低限度的linux中修复了一两个月前的问题。 vi是唯一可用的编辑器。

似乎已经select了一个答案,但对我来说最大的区别一直是模态与非模态。 Vim是模态的,这意味着它会根据一组特定的使用模式进行优化。 至less我是这样看待这个问题的。 这使得使用Vim有一个不同的体验,因为不是有一个你input代码的工作区,而是真的在告诉一个环境来处理文本。 这就是为什么人们说Vim的事情,你真的在​​学习一门语言。 wq和:s / foo / bar是编辑和读取文本的shell环境的一部分。

另一方面,Emacs更接近大多数编辑/文字处理器/等等。 你今天看到了 您有一个具有高度可编程接口的工作区。 这就是为什么你会看到诸如电子邮件,irc,shell等等。作为一名程序员,你可以很容易地从“我接上线路号码”的angular度来思考问题。 离开编辑器的愿望变得更less了,因为不必退出,打开一些其他的应用程序/语言,并在一些文本上做事情,你有Emacs,你可以在你的编辑器范围内做这些事情。

这两个想法并不一定是对立的,但它只是表明了两个不同的焦点。 就我个人而言,我使用Emacs,但是我已经看过认识Vim的人,并且可以诚实地说,你select哪一个并不重要。 我先尝试了Vim,但是Emacs最终坚持了我。 诚然,不pipe你select什么,你至less应该对Vim至less有一些精通,因为它总是可用的。

在日常级别上有巨大的差异 – Vim (或任何vi变体)本质上是模态的(您进入了无法编辑的命令模式),Emacs(以及大多数其他编辑器)不是。

当然,使用菜单等,你不必在Vim中实际进入命令模式。 但是,即使使用Vim的一小部分力量,你也可以。 这是Vim / Emacs辩论的核心。

我个人也认为Emacs更具可扩展性。 你可以find许多东西的Elisp包。

我很好奇,但是,为什么你想通过更传统的IDE学习其中的一个。 你想要学习其中的一个是什么?

关于这两位编辑有很多事情已经说了,但是我只需要添加5便士。 两位编辑都很棒,你们两个都不会出错。

我是一个vi / vim用户,现在已经有15年了。 我已经尝试了几次转换为emacs,但每次都发现vim实际上可以在不需要编写lisp扩展或安装某些东西的情况下完成缺less的任务。

对我来说,编辑器的主要区别在于vim让你使用环境/操作系统,而emacs试图封装或replace它。 例如,你可以在你的文本中添加一个date:r!date在vim或日历中:r!cal 1 2014,甚至用你的内容的hex版本replace你的缓冲区的内容。 例如。 :%!xxd,编辑hex,然后返回:%!xxd -r,还有更多的其他用途,比如内build的grep,sed等

您还可以获得EX批处理编辑function,例如。 replace某些单词,重新设置代码格式,转换dos-> unix换行符,一次运行一个macros,比如说100个文件。 这很容易与前。 我不确定emacs是否有类似的东西。

换句话说,恕我直言,vim更接近unix哲学。 它通常更简单和更小,但如果你知道你的操作系统和你的工具,你不会需要超过它(VIM)所提供的。 我从来没有做。

除了vi是任何Unix / Linux系统上的实际标准之外,为什么要学会使用2种工具来做同样的事情。 当然有些系统提供毫克或类似的东西,但绝对不是全部。 Unix + Vi <3。

那么,我的5便士。

对我来说,Emacs的优点是,

  • tramp-mode允许你通过ssh编辑远程文件。 就像本地文件一样。
  • tramp-mode + dired =全function的sftp客户端
  • 支持您将需要的每种语言。
  • 内置terminal仿真器(term-mode),所以我可以保持编码,而无需在应用程序之间切换。
  • 可扩展性任何你不喜欢你可以改变使用lisp。

对我来说,emacs有更好的开发工具(不仅是基于标签的工具)。

  • Cedet (c / c ++)
  • Xrefactory (c / c ++ / java)
  • 煤泥 (普通的lisp)
  • JDEE (java)
  • ECB (代码浏览器)
  • GDB支持
  • NXML (xml)

因为Spacemacs,现在你甚至不需要考虑这两者之间的区别 。 这是一个社区驱动的Emacs发行版。

正如它所说,

最好的编辑器既不是Emacs也不是vim,它是Emacs和Vim。

Spacemacs结合了Emacs和Vim的优点,让你的生活和工作变得更容易。

它也有一个体面的标志。

看下面的截图,

doc/img/spacemacs-python.png

我想在这里引用“UNIX编程的艺术”一书的引用:

许多经常使用vi和Emacs的人倾向于将它们用于不同的事情,并且发现两者都有价值。

一般来说,vi最适合小型工作 – 快速回复邮件,简单调整系统configuration等等。 当你使用一个新的系统(或通过networking远程访问一个系统),而且没有你的Emacs自定义文件时,这一点特别有用。

Emacs自带的扩展编辑会话中,您必须处理复杂的任务,修改多个文件,并在会话期间使用其他程序的结果。 对于在他们的控制台上使用X的程序员来说(在现代的Unix上是典型的),在大型窗口login后立即启动Emacs是正常的,并且永远运行,可能访问几十个文件,甚至在多个Emacs子窗口中运行程序。

我真正想在这里强调的是:“ 许多人认为两者都有价值 。”

我select通过vim使用emacs最大的不同是emacs中内置的gdb支持。 Vim没有包含在它的默认发行版中,并且用于集成gdb和vim的项目几乎不可能与MacVim一起工作

Emacs有viper模式,所以在某些真正的意义上,它提供了一个超集(除了那些Vim在Viper和Vimpulse中缺less的Vim特性 )。

vi(和VIM IIRC)重量更轻(可以编辑文件),但提供更less的function(subprocess通信,扩展语言)。

Emacs的好处

  • Emacs具有非模态界面(默认)和模态界面(例如它可以通过Evil,Viper或Vimpulse模拟vim和vi)。

  • 其中一个最移植的计算机程序。 它运行在文本模式和各种操作系统上的graphics用户界面下,包括大多数类Unix系统(Linux,各种BSD,Solaris,AIX,IRIX,macOSetc),MS-DOS,Microsoft Windows,AmigaOS,和OpenVMS。 Unix系统,无论是免费的还是私有的,都经常提供与操作系统捆绑在一起的Emacs。

  • Emacs服务器架构允许多个客户端连接到相同的Emacs实例,并共享缓冲区列表,杀死环,撤消历史和其他状态。

  • 在线帮助系统,包含键盘绑定,function和命令。

  • 可扩展和可定制的Lisp编程语言变体(Emacs Lisp),其function包括:

  • 一个function强大且可扩展的文件pipe理器(dired),集成的debugging器,以及大量的开发和其他工具。

  • 让每个命令成为Emacs Lisp函数,都可以通过编程方式响应以前的操作和文档状态,从而启动DWIM(执行此操作)的命令。 例如,switch-or-split-window命令可以切换到另一个窗口(如果存在),或者根据需要创build一个窗口。 这减less了用户必须记住的击键和命令的数量。

  • “操作系统内的操作系统”。 Emacs Lisp使得Emacs可以远远超出编辑function。 甚至一个基本的安装包含几十个应用程序,包括两个Web浏览器,新闻阅读器,几个邮件代理,四个IRC客户端,一个ELIZA版本和各种游戏。 所有这些应用程序都可以在Emacs运行的任何地方使用,具有相同的用户界面和function。 从版本24开始,Emacs包含一个软件包pipe理器,可以轻松安装其他应用程序,包括备用Web浏览器,EMMS(Emacs多媒体系统)等等。 还有许多用于编程的软件包,包括一些针对特定语言/库组合或编码风格的软件包。

像vi一样的编辑的好处

  • 编辑命令是可组合的
  • Vi有一个模式界面(Emacs可以模拟)
  • 从历史上看,vi加载速度比Emacs快。
  • 虽然与UNIX传统密切相关,但它运行在所有可以实现标准C库的系统上,包括UNIX,Linux,AmigaOS,DOS,Windows,Mac,BeOS,OpenVMS,IRIX,AIX,HP-UX,BSD和POSIX兼容系统。
  • 通过Vim脚本或者Python,Ruby,Perl和Lua等解释型语言的API进行扩展和定制
  • 无处不在。 基本上所有的Unix和类Unix系统都带有内置的vi(或者一个变体)。 Vi(和ex,但不是vim)是在POSIX标准中指定的。
  • 系统救援环境,embedded式系统(特别是那些有busybox的)和其他受限制的环境通常包括vi,但不包括emacs。

来源: https : //en.wikipedia.org/wiki/Editor_war

Emacs实际上更多的是做所有的程序,而vi(m)实际上只是一个编辑器。 如果你正在编辑文本,他们都很好,但我更喜欢emacs,只是因为我必须从主行转移一个走动,并继续在命令模式下input错误的东西。 我没有这个问题,vi(m)可能是你的编辑。

黄疸的观点:

vi(而不是vim)是一种职业必需品。 无论环境如何,您总是可以轻松使用某种forms的vi。 你可以在vi中使用emacs时,你可以在vi中在unix-land中build立bash命令。

Even Microsquish has to support vi (although they do a good job of hiding it) because of gov't and corporate compliance with published standards.

In my opinion, if you are in a hands-on job in a busy environment–not a hothouse flower confined to one fancy rig in a development environment, or in academia–knowing a lot about a fancy editor is a job handicap. Don't learn all the fancy tricks in vim or emacs, and don't develop a bunch of macros to make the editing environment bend to your will. It's an enormous time sink that gets in your way when you attend to different machines that you probably can't justify in a factory environment.

Read Bill Joy's paper–it is a very competent, perhaps even beautiful, engineering exercise in editing plain text very, very fast. Parito's rule applies here: 80% of the fruit is in 20% of the baskets. Editing plain text very very fast is the crux of editing competence–all else is optional–and sometimes hurtful.

Its like apples and oranges. Both have different design and philosphy. Vim is a Text Editor while Emacs is a Lisp Interpreter that does Text Editing.

I use Vim because its fast, sleak, and really good at manipulating texts. It has a composable natural key binding that can make your development tasks really harmonic. Vim is based on the simple *nix philiosphy of doing one thing really well – ie Text Manipulation.

Extending Vim using bash/zsh and tmux is usually easy and allows you learn a lot of things. IMHO this is a good learning curve. The key thing is to learn how to integrate these things to get a larger working application. With Vim you'll need to learn integration because it doesn't naturally integrate unless you tell it how to. Another worthwhile extension which I use is Tig . Its an ncurses based Git frontend . I just have a binding that opens Tig silently and then I do all the Git stuff there.

Its up to the end user to decide what works best. That Emacs and Vim has stood the test of time is proof of their worthiness. Eventually a good programmer needs nothing more than a pen and a paper to be creative. Good algorithms don't need editors to back them. So try them both and see what makes you more productive. And learn design patterns from both these softwares as there are plenty to learn and discover!

If you move around a lot from site to site or your job involves loging on to production systems then vim is the way to go.

All *nix machines will have vi installed by default.

Most sysdamins prefer ksh as the default shell. ksh uses vi (or emacs) command keystrokes to search history and edit the command line.

If you dont know vi well you are severely handicapped when you log into a unix box with a standard configuraton.

For this reason alone I would recommend vim as your normal every day editor. I have seen emacs fans tear there hair out trying to amend config files on a bare bones unix server.

vim is a handy editor, you simple type vim filename to open the file, edit, save and close.

emacs is an "operating system" pretend to be an editor, you can eval code to change its behavior, and extend it as you like. A mode to receive/send email on emacs is like an email software on operating system.

When doing simple editing, for example, modify a config file, I use vim .

Otherwise, I never leave emacs .

In your question, you haven't mentioned that you want it to program in Lisp! But as you have been commenting your answers, I have understood that you actually want a LISP programming interface.

For that precise task, simply forget about Vi. Emacs integration with LISP is wonderful! You should use SLIME. You will then have wonderful integration with the REPL, being able to eval functions, buffers or files directly into a running interpreter in an emacs buffer and much more…

Keystroke execution::: vi editing retains each permutation of typed keys. This creates a path in the decision tree which unambiguously identifies any command , whereas Emacs commands are a combination of typed keys executed immediately, which leaves the user with the choice of whether or not to use a command.

Memory usage and customizability::: vi is a smaller and faster program, with a more limited capacity for customization, whereas, Emacs takes longer to start up and requires more memory. However, it is highly customizable and includes a large number of features, as it is essentially an execution environment for a Lisp program designed for text-editing.

I think the main difference is the design target. VIM is for UNIX as a working editor. Emacs is for GNU and lisp hackers, so it has some mixed design element.

I use vim on my workstation, while I love emacs too.

Firstly Vi (original realization) not used today. That you say is some Vim derivation.

To extend Vim functionality you must recompile Vim, Emacs not.

Emacs has Vim in self (viper-mode).

Emacs usually need manually installation, Vim typically preinstalled on all Unix like OS (but if you have ssh access to host tramp-mode win Vim :).

If you try Vim you hate Emacs, so start from Emacs first.

Also read http://www.dina.dk/~abraham/religion/vi-tutorial.html (link go down so use this )

Anwer search in hxxp://en.wikipedia.org/wiki/Editor_war