在没有就为什么一个比另一个更好的宗教争论中,Emacs和Vim之间的实际差异是什么?我正在学习其中一个,但我意识到每个人的学习曲线很高,我无法决定.我从来没有使用过这种类型的编辑器(我总是使用IDE),所以任何有助于新手的东西都是有利的.
在火焰战争开始之前:我不是在问哪个更好,我问的是两者之间的差异.我想客观比较一下.
(以下文字是我的意见,不应视为事实或侮辱)
使用Emacs,您需要全天候开放并在程序内部生活,几乎所有操作都可以从那里完成.您编写自己的扩展,用于记笔记,组织,游戏,编程,shell访问,文件访问,听音乐,Web浏览.它需要数周和数周才能满足它,然后你会一直学习新的东西.当您无法访问它并不断更改配置时,您会感到恼火.您将无法轻松使用其他人的emacs版本,也不会安装它.它使用Lisp,这很棒.你可以把它变成你想要的任何东西.(什么都没有)
使用Vim,它几乎总是预先安装.它很快.你打开一个文件做一个快速编辑,然后退出.如果您在其他人的机器上,则可以使用基本设置.它不太可编辑,但它仍然比大多数文本编辑器好得多.它认识到大多数时候您正在阅读/编辑而不是打字并使这一部分更快.你没有受到emacs小指的影响.这并不是那么令人生气.它更容易学习.
即使我每天都在使用Emacs(并且喜欢它),除非你打算花很多时间在你选择的程序中我会选择vim
Vim不是一个shell.并且它与子流程的沟通不畅.这几乎是设计的,而在Emacs中,这些元素包含在设计中.这意味着一些东西,比如嵌入调试器或解释器(产生一种IDE),在Vim中很难.
此外,Emacs快捷方式主要通过修饰符访问,显然Vim界面是着名的模态,可以访问大量的直接键进行操作.
Emacs曾经是两个可编程的唯一编辑器,虽然Vim的可编程性有很多奇怪的级别,但添加了Python和Ruby绑定(还有更多,我忘了),Vim在大多数方面都是可编程的你会关心的.
我使用Vim,我对它很满意.
Vim的:
更好的简单编辑器(简单任务所需的键更少)
更活跃的脚本社区 - 内部语言:vimscript
脚本,插件,配色方案的一个中央存储库......
也可以在python,ruby中扩展
可以移植(emacs有一些问题)
Emacs的:
默认情况下是非模态的(今天的大多数编辑都采用了这种方法).虽然存在模仿vim行为的邪恶模式.
用于扩展它的更强大的语言(elisp是一种完整的语言,在emacs中你几乎可以重新定义所有内容;而在vim中你无法重新定义编辑器的功能.在不利方面,vimscript与今天的动态语言相比类似于elisp几乎不像任何东西)
更可扩展
对GNU工具的优秀支持(其中一堆)
就个人而言,我更喜欢vim - 它很小,做它应该做的事情,当我希望一个完整的IDE我打开VS. Emacs作为一个想要成为IDE(或者我应该说是一个操作系统)的编辑器的方法,但并不完全是恕我直言,已经过时了.在过去有一个电子邮件客户端,ftp客户端,俄罗斯方块,...在一个包(emacs)中的东西有一定道理......现在,它已经不复存在了.
然而,两者都是程序员和超级用户社区用户之间的宗教讨论话题,在这方面,如果接触(在相同的句子/问题中),两者都非常适合开始火焰战争.
如果您正在寻找对两位编辑的客观分析,请查看它们的起源和各自设计背后的理念.想想,哪一个更适合你并学习它(并学习它并学习它,因为在你发现它的真实效用与任何IDE之前需要时间). Vi的显示编辑简介由Bill Joy和Mark Horton编写,他解释了为什么他选择模态设计和各种击键的基本原理(这有助于我记住CTRL-W + W(将切换到下一个W indow和它对于CTRL W + CTRL W也是如此,以防万一你按住CTRL键一段时间.
这是Emacs时间轴的链接,并提供了Multics Emacs论文.这是关于Emacs的 RMS论文,我看到压力是在一个可编程的文本编辑器上(甚至早在1981年及之前).
我没有读过emacs的论文,但是已经阅读过Bill Joy的vi论文了几次.两者都是旧的,但你仍然会有这个理念,你可能会选择使用当前的工具(vim 7.x或emacs 25?)
编辑:我忘了提到阅读这两篇论文需要耐心和想象力,因为它会让你在阅读时回到过去.但这是值得的.
Vim总是比Emacs更快启动.我说在任何机器上,开箱即用的Vim安装都会比开箱即用的Emacs安装更快.而且我倾向于认为,经过适量的自定义之后,Vim仍然会比Emacs更快启动.
在那之后,另一个实际的区别是Emacs的模式.在编辑XML,C/C++/Java /无论什么,LaTeX以及您能想到的最流行的语言时,它们使您的生活变得更加轻松.它们使您希望让编辑器保持开放以进行长时间的会话和工作.
总而言之,我会说Vim会把你带到短暂,快速的编辑任务中去; 而Emacs鼓励你潜入长时间的课程.
VI始终可用,将运行在最瘫痪的单用户模式,损坏的图形,无键盘映射,慢速链接机器上 - 所以值得知道如何编辑其中的简单文件仅用于sysadmin任务.
Emacs是编辑器中的完整用户界面.我们的想法是,当您启动机器时启动Emacs并且永远不会离开它.可能会有数千个会话.
与使用GUI编辑器/ IDE和使用python/awk/etc之类的东西进行额外任务相比,是否值得学习Emacs的功能取决于您.
我是一个成熟的Emacs粉丝男孩,但在我认识Emacs之前我就知道VI了.也就是说,我让所有的人都学习VI,因为它始终可用,无处不在.其中任何一个都不会出错.
我从vi开始,去了emacs,然后去了vim.我一直在考虑尝试让Emacs看看过去五年里发生了什么变化.(说到IDE,我已经进入了eclipse一段时间,但我更喜欢我的终端窗口将我的mac连接到我的(丈夫的)linux盒子).
剪切和粘贴的东西最近一直困扰着我.在Vim中剪切和粘贴比在Emacs,IIRC中采取更多步骤.从浏览器到终端窗口的粘贴是令人恼火的,除非你做一些我不喜欢做的事情,所以我忍受了奇怪的缩进.我认为,在emacs中编辑多个文件更容易.如果你把它们都放在屏幕上,至少从一个文件跳到下一个文件.
我没有玩过vi或emacs的花哨功能,因为我只想开始编码业务.我需要的只是漂亮的颜色和适当的标签到空间转换(特别重要的是python).
我认为这完全取决于你是否想要使用:wq
或Ctrl-x Ctrl-s
(IIRC)保存文件,如果你不关心花哨的东西.
@mgb是对的.我一直在最低限度的linux中,在一个月或两个星期前在Debian发行版中修复一些东西.vi是唯一可用的编辑器.
似乎已经选择了一个答案,但对我来说最大的不同就是模态与非模态.Vim是模态的,这意味着它基于一组特定的使用模式进行优化.至少那是我一直看着它的方式.这使得使用Vim成为一种不同的体验,因为您没有使用您键入代码的工作区,而是在告诉环境对文本进行操作.这就是为什么人们说像Vim这样的东西你真的在学习语言.:wq和:s/foo/bar是编辑和读取文本的shell环境的一部分.
另一方面,Emacs更接近大多数编辑器/文字处理器/等.你今天看到了.您的工作空间具有高度可编程的界面.这就是为什么你会看到像电子邮件,irc,shell等的东西.作为程序员,你可以很容易地想到"记下我所使用的行号并对信息做些什么".离开编辑器的愿望变得越来越少,因为不需要退出,打开其他应用程序/语言并在某些文本上执行操作,您可以使用Emacs在编辑器范围内执行这些操作.
这两个想法不一定是对比的,但只是它们揭示了两个不同的焦点.我个人使用Emacs,但我见过那些非常了解Vim的人,可以说老实说你选择哪个并不重要.我先尝试过Vim,但是Emacs最终还是坚持了我.确实,无论你选择什么,你至少应该对Vim有所了解,因为它总是可用的.
在日常级别上存在巨大差异 - Vim(或任何vi变体)本质上是模态的(您进入无法编辑的命令模式)和Emacs(以及大多数其他编辑器)不是.
当然,使用菜单等,您不必在Vim中实际进入命令模式 - 首先.但是要使用Vim的一小部分功能你会.这是Vim/Emacs辩论的核心.
就个人而言,我也认为Emacs更具可扩展性.你可以找到很多东西的Elisp软件包.
不过,我很好奇,为什么你想通过一个更传统的IDE学习其中一个.你想学习其中一个是为了什么?
关于两位编辑都有很多事情要说,但我只有5便士的补充.两位编辑都很精彩,你们两个都不会出错.
我现在是vi/vim用户大约15年了.我已经尝试过多次转换为emacs,但每次都发现vim实际上可以开箱即用,而不需要编写lisp扩展或安装东西.
对我来说,编辑器的主要区别是vim使你使用环境/操作系统,而emacs试图封装它或替换它.例如,您可以通过以下方式在文本中添加日期:r!date in vim,或者日历:r!cal 1 2014,或者甚至用内容的十六进制版本替换缓冲区的内容.例如.:%!xxd,编辑十六进制,然后返回:%!xxd -r,以及更多其他用途,如builtin grep,sed等.
您还可以获得EX批量编辑功能,例如.替换某些单词,重新格式化代码,转换dos-> unix换行符,一次运行一个宏说100个文件.这很容易用ex.我不确定emacs是否有类似的东西.
换句话说,IMHO vim更接近unix哲学.它通常更简单,更小,但如果你了解操作系统和工具,你可能需要的不仅仅是它(VIM)必须提供的.我从来没有做.
除了vi是任何unix/linux系统上的事实标准之外,为什么要学会使用2个做同样事情的工具.当然有些系统提供毫克或类似的东西,但绝对不是全部.Unix + Vi <3.
好吧,我的5便士.
对我来说,emacs的专业人士是,
tramp-mode允许您通过ssh编辑远程文件.就像本地文件一样.
tramp-mode + dired =功能齐全的sftp客户端
支持您需要的每种语言.
内置终端仿真器(术语模式),所以我可以保持编码,而无需在应用程序之间切换.
可扩展性您不喜欢的任何东西都可以使用lisp进行更改.
我想在这里引用"UNIX编程的艺术"一书:
许多经常同时使用vi和Emacs的人倾向于将它们用于不同的事物,并且发现它们两者都很有价值.
通常,vi最适合小型作业 - 快速回复邮件,简单调整系统配置等.当您使用新系统(或通过网络远程系统)并且没有方便的Emacs自定义文件时,它尤其有用.
Emacs为扩展编辑会话提供了自己的功能,您必须在会话期间处理复杂任务,修改多个文件以及使用其他程序的结果.对于在其控制台上使用X的程序员(这在现代Unix上是典型的),在大窗口中登录时间后立即启动Emacs并让它永远运行,可能访问几十个文件甚至在多个Emacs子窗口中运行程序是正常的.
我真正想要强调的是:« 很多人发现知道两者都很有价值.»
对我来说,emacs有更好的开发工具(不仅仅是基于标签的工具).
Cedet(c/c ++)
Xrefactory(c/c ++/java)
粘液(常见的口齿)
JDEE(java)
ECB(代码浏览器)
GDB支持
NXML(xml)
现在你甚至不需要考虑这两者之间的区别,因为Spacemacs.它是一个由社区驱动的Emacs发行版.
如上所述,
最好的编辑器既不是Emacs也不是vim,它是Emacs和Vim.
Spacemacs结合了Emacs和Vim的最佳功能,让您的生活和工作更轻松.
它也有一个体面的标志.
见下面的截图,
http://spacemacs.org/doc/img/spacemacs-python.png
Emacs的好处
Emacs同时具有非模态接口(默认情况下)和模态接口(例如,它可以通过Evil,Viper或Vimpulse模拟vim和vi).
最移植的计算机程序之一.它以文本模式运行,并在各种操作系统的图形用户界面下运行,包括大多数类Unix系统(Linux,各种BSD,Solaris,AIX,IRIX,macOSetc.),MS-DOS,Microsoft Windows,AmigaOS,和OpenVMS.Unix系统,包括免费和专有系统,经常提供与操作系统捆绑在一起的Emacs.
Emacs服务器体系结构允许多个客户端连接到同一个Emacs实例并共享缓冲区列表,kill ring,undo history和其他状态.
普适的在线帮助系统,具有即时记录的键绑定,功能和命令.
可扩展和可定制的Lisp编程语言变体(Emacs Lisp),具有以下功能:
功能强大且可扩展的文件管理器(dired),集成调试器以及大量开发和其他工具.
让每个命令成为Emacs Lisp函数,通过以编程方式响应过去的操作和文档状态,使命令成为DWIM(Do Do I Mean).例如,switch-or-split-window命令可以切换到另一个窗口(如果存在),或者根据需要创建一个窗口.这减少了用户必须记住的击键次数和命令.
"操作系统内的操作系统".Emacs Lisp使Emacs的编程远远超出了编辑功能.甚至基本安装包含几十个应用程序,包括两个Web浏览器,新闻阅读器,几个邮件代理,四个IRC客户端,一个版本的ELIZA和各种游戏.所有这些应用程序都可以在Emacs运行的任何地方使用,具有相同的用户界面和功能.从版本24开始,Emacs包含一个包管理器,可以轻松安装其他应用程序,包括备用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标准中指定.
系统救援环境,嵌入式系统(特别是那些具有busybox的系统)和其他受限环境通常包括vi,但不包括emacs.
资料来源:https://en.wikipedia.org/wiki/Editor_war
选择在vim上使用emacs的最大区别在于emacs内置的gdb支持.Vim没有包含在它的默认发行版中,那里用于集成gdb和vim的项目几乎不可能与MacVim一起工作
Emacs有viper模式,所以从某种意义上说,它提供了一个超集的功能(除了Emacs中Viper和Vimpulse中缺少什么Vim功能中所描述的那些功能?).
vi(和VIM IIRC)重量较轻(它可以编辑文件),但提供的功能较少(子进程通信,扩展语言).