Emacs和Vim之间的区别


685

不用争论为什么一个比另一个更好,Emacs和Vim之间的实际区别是什么?我想学习一种或另一种,但我意识到每种学习曲线的难度很大,我无法决定。我从未使用过这种类型的编辑器(我一直使用过IDE),所以对新手有帮助的都是一个加号。


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


3
如果使用Mac(OSX),那么您会发现许多基本的emacs光标移动命令几乎在任何地方都有效。(例如,他们在这里在网页上键入此注释的地方工作。)因此,对于Mac用户而言,至少学习以下emacs子集对整个系统都有好处:^ A ^ B ^ D ^ E ^ F ^ K ^ L ^ N ^ O ^ P ^ T ^ V ^ Y
Matt

2
@JamesAnderson:根据我的经验,情况恰恰相反。使用vim 2.5年,然后切换到emacs。emacs人们大多不在乎...“对您有用的”。这是,salespitch#emacs中的内容<fsbot> We aren't gonna lie. Emacs sucks. Some of us tolerate it, but we can't tell you if YOU'LL be able to. Try it and make up your own mind.
Silex

2
Emacs绝对是一个很棒的操作系统,但是缺少一个不错的编辑器。
Technical_difficulty

1
@ JimmyM.G.Lim不,它使用系统上的当前寻呼机。如果您运行,PAGER=cat man则man将直接在屏幕上显示文本。
SS安妮

1
猜想当初被问到时,“主要基于意见的”警察并不存在;-)啊,更简单的时间...我要说的是,一次,读了一本关于emacs的书,然后尝试一下,我认为是炸弹。放假三个星期后,我发现我完全忘记了所有按键操作。另一方面,vim并不是我真正的事,但是我可以在需要时使用just可靠地将其半功能化i, esc, wq
JL Peyret

Answers:


491

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

使用Emacs,您可以将它24/7全天候打开并在程序中运行,几乎您可以做的所有事情都可以在此完成。您可以编写自己的扩展名,并将其用于笔记,组织,游戏,编程,shell访问,文件访问,听音乐,浏览网页。可能需要数周和数周的时间,您才会对此感到满意,然后您将一直学习新知识。当您无法访问它并不断更改您的配置时,您会感到恼火。您将无法轻松使用其他人的emacs版本,也不会仅安装它。它使用Lisp,这很棒。您可以将其变成任何您想要的东西。(什么都没有)

有了Vim,几乎总是预先安装了它。它很快。您打开文件进行快速编辑,然后退出。如果您在别人的机器上,则可以使用基本设置。它不是那么可编辑,但是仍然比大多数文本编辑器好得多。它可以识别出大部分时间您在阅读/编辑时都不会键入内容,从而使该部分速度更快。您不会遭受emacs小指的困扰。没那么令人生气。更容易学习。

即使我每天整天都在使用Emacs(并喜欢它),除非您打算在程序中花费很多时间,否则我会选择vim


153
Wrt没有可用的东西:我建议将.emacs和.emacs.d放在源代码控制存储库中,因此,获得理想的Emacs设置仅是结帐的问题。
邓肯·拜恩

7
emacs和vim都可能遭受上述问题的困扰:两者都可以配置到与原始形式相比无法识别的程度。另外,我第二次使用vcs。
Alexej Magura 2014年

11
@Radu,您在什么系统上工作?我从未见过在2010年代有真实的系统vi而不是vim别名的真实系统。
ELLIOTTCABLE

9
也许Vim比Emacs更容易学习,但是如果您以前没有使用过Vim的知识,那么它会令人难以置信地令人困惑!我必须使用Google才能将其关闭,但仍然必须尝试几次才能正确使用。
HelloGoodbye 2015年

9
永远不要低估VIM的“预安装”特权:几乎无论您身在何处都可以使用它,并且几乎不需要定制就可以使用它。在ssh访问其他计算机时,我一直都在使用它。这就是为什么我首先了解它的原因,并且因为我的朋友知道VIM并且可以帮助我。(也不要低估朋友的支持!)
jvriesem

137

Vim不是shell。而且它不能与子流程很好地通信。这几乎是设计使然,而在Emacs中,这些元素是设计所包含的。这意味着在Vim中很难进行某些事情,例如嵌入调试器或解释器(产生某种IDE)。

另外,Emacs快捷方式主要是通过修饰符访问的,显然,Vim界面是著名的模态,可以访问大量的直接键来进行操作。

Emacs曾经是两者中唯一可以编程的编辑器,而Vim的可编程性有很多怪异的层次,另外还增加了Python和Ruby绑定(我忘记了更多),Vim也可以在大多数方面进行编程您会照顾的。

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


6
较小的更新:由于8.0和8.1版本甚至引入了终端缓冲区,因此Vim支持与子进程更好地通信,因此,就emacs而言,它已经越来越近了。
DarkWiiPlayer

110

Vim:

  • 作为简单的编辑器更好(简单任务所需的键更少)
  • 更活跃的脚本社区-内部语言:vimscript
  • 一个脚本,插件,配色方案,...的中央存储库
  • 也可在python,ruby中扩展
  • 可以制成便携式(emacs对此存在一些问题)

Emacs:

  • 默认情况下为非模态(当今大多数编辑者都采用这种方法)。尽管有一种模仿vim行为的邪恶模式
  • 扩展它的功能更强大的语言(elisp是一种完善的语言,在emacs中,您几乎可以重新定义所有内容;而在vim中,您不能重新定义编辑器的内置功能。不利的是,vimscript与当今的动态语言相对类似,而elisp与任何东西都不相似)
  • 更可扩展
  • 对GNU工具的出色支持(一堆)

就我个人而言,我更喜欢vim-它很小,可以完成它应该做的事情,当我希望使用完整的IDE时,我可以打开VS。Emacs成为想要成为IDE(或者应该说是OS)但不完全是IDE的编辑器的方法已经过时了。在过去,拥有电子邮件客户端,ftp客户端,俄罗斯方块,...在一个软件包(emacs)中没有什么是有意义的...如今,它不再存在了。

但是,两者都是程序员和超级用户社区用户之间宗教讨论的主题,并且在这方面,如果联系在一起(使用相同的句子/问题),两者都非常适合引发火焰战争。


47
“作为编辑者更好”是相当模糊的。我很想知道为什么。
艾伦(

41
@Allen-它的含糊之处是什么?我很少遇到vim和emacs的用户,他们对该声明有疑问。即使是铁杆emacs用户也通常将其视为事实。您是否使用过两个编辑器?我相信相对而言,vim在文本编辑功能方面具有优势。
Rook

36
我难以置信,任何人都不会接受这一事实。作为emacs和Plain VI的长期用户,我已经使用过几次vim,但是如果出于其他原因,除了主要和次要模式的更多选择之外,“更好地作为编辑器”就必须进入emacs。在输入时为您提供帮助。
肯德尔·赫尔姆斯特·盖尔纳

61
Vim作为编辑器更好,因为与emacs相比,操作文本所需的手和手指移动更少,至少这是我的经验。
StackedCrooked

7
除此之外,有效的vim更适合编辑:行号,可视模式,操作wint1.kaist.ac.kr/files/attach/images/59/450/…。FCOL,我很难让emacs只一次滚动一行。
Rook

52

如果您要对这两个编辑器进行客观分析,请查看它们的起源和各自设计背后的理念。想一想,哪种方法更适合您并对其进行学习(并对其进行学习,因为您需要花费时间才能发现其针对任何IDE的真正效用)。 Bill Joy和Mark Horton撰写了《使用Vi进行显示编辑入门》,他解释了为什么选择各种按键的模态设计和原理(这有助于我记住CTRL-W + W(将切换到下一个W indow,与CTRL W + CTRL W相同,以防万一您按住CTRL键的时间更长。

这是指向Emacs时间轴的链接,并引用了Multics Emacs论文。Hereis关于Emacs的 RMS论文,我看到的重点是可编程文本编辑器(甚至可以追溯到1981年及之前)。

我尚未阅读emacs论文,但已经阅读了Bill Joy的vi论文两次。两者都很老,但是您仍然会明白这一点,您可以选择使用当前工具(vim 7.x或emacs 25?)

编辑:我忘了提一下,阅读这两篇论文需要耐心和想象力,因为这会使您在阅读时回到过去。但这是值得的。


43
  1. Vim的启动总是比Emacs快。我是说在任何机器上,Vim的即装即用安装比Emacs的即装即用安装启动快。而且我倾向于认为,经过适度的定制后,Vim的启动速度仍将比Emacs快。

  2. 此后,另一个实际的区别是Emacs的模式。当您编辑XML,C / C ++ / Java /任何内容,LaTeX和您可以想到的大多数流行语言时,它们使您的工作变得非常轻松。它们使您想保持编辑器处于打开状态以进行长时间的工作。

总而言之,我要说的是Vim会带您去完成简短,快速的编辑任务。而Emacs鼓励您参加很长的课程。


1
相反,我认为模式不会使生活更轻松。和拉里·泰斯勒认为相同
伊莱兰·马尔卡

2
Emacs的模式如何帮助编码?(我是新来的...)
jvriesem,2015年

4
很久以前,我从vi切换到emacs的原因有四个:(a)单击以出现下一个编译器错误;(b)gdb集成;(c)grep和find-grep。现在可以在vim中做这些事情吗?
zzz777

“ Vim的启动总是比Emacs快”-如果使emacs服务器保持运行,则对emacs-client进行打标非常快。我有脚本,可以在所有机器上复制(使用git)。(实际上,我也使用vim;它总是取决于我在哪里以及任务是什么)
Jay

“ Vim的启动总是比Emacs更快”-同样,通过use-package及其:defer选项,我的Emacs几乎立即打开。我什至放弃使用emacsclient。
周杰伦

37

VI始终可用,并且可以在最残缺的单用户模式,破碎的图形,无键盘映射,慢速链接计算机上运行-因此,值得一提的是,该知道如何仅针对sysadmin任务在其中编辑简单文件。

Emacs是编辑器中的完整用户界面。这个想法是在启动机器时启动Emacs,并且永远不要离开它。可能有数千个会话。

与使用GUI编辑器/ IDE和使用诸如python / awk / etc之类的额外任务相比,学习Emacs的功能是否值得进行取决于您。


2
出于这些原因,我知道VI-但是最近,我要说的是,您几乎没有遇到没有至少安装基本EMACS的UNIX系统的情况,并且它可以使较差的外壳环境更加可忍受。
肯德尔·赫尔姆斯特·吉尔纳

3
或者,将busybox塞入initrd并调试用于启动设备的损坏的存储驱动程序,因此在init进程的早期,您所拥有的只是初始的ram磁盘,而您仍然拥有编辑器-vi。
smcameron

2
使用vi一段时间后,您的手指知道了动作-但是您不记得实际的按键是什么!
马丁·贝克特

10
我认为ed那是“一直可用的,它将在最严重的单用户模式,损坏的图形,无键盘映射,慢速链接机器上运行”。等等,这是哪一年?(叹气- ed,我永远不会忘记你。)
belacqua 2011年

2
@Kendall:当前的ubuntu linux没有安装emacs。
直觉

25

我是一个成熟的Emacs迷,但是我很早就认识VI。就是说,我让我所有的人都学习VI,因为它随处可见。其中任何一个都不会出错。


2
这也是我的经验... Emacs或uEmacs从未可用。我的第一个编辑器是uEmacs(位于Amiga上),但是自从我学习vim以来,携带它太方便了。
Marius 2013年

基本上这也是我的经验。Vi无处不在,通常作为unix系统上的默认$ EDITOR安装,因此如果您使用unix,则必须知道它。就是说,我每天都使用emacs进行文本编辑,我喜欢它。
Fergie

14

似乎已经选择了一个答案,但是对我而言,最大的不同始终是模态与非模态。Vim是模态的,这意味着它基于一组特定的使用模式进行优化。至少我一直是这样看的。这使使用Vim成为一种不同的体验,因为您实际上没有在工作区中键入代码,而是在告诉环境要对文本进行操作。这就是为什么人们说像Vim这样的事情,您确实正在学习一种语言。:wq和:s / foo / bar都是外壳之类的部分,可编辑和读取文本。

另一方面,Emacs更接近于大多数编辑器/文字处理器/等。你今天看到。您的工作区具有高度可编程的界面。这就是为什么您会看到诸如电子邮件,irc,shell等之类的原因。作为一名程序员,您很容易想到说“拿我所在的行号并对信息进行一些处理”。离开编辑器的愿望变得更少,因为有了Emacs,您不必退出,打开其他应用程序/语言并在某些文本上执行操作,而可以在编辑器范围内执行这些操作。

这两种想法不一定是相反的,只是它们揭示了两个不同的焦点。我个人使用Emacs,但是我见过的人非常了解Vim,并且可以诚实地说,无论选择哪种都无关紧要。我先尝试了Vim,但Emacs最终坚持了下来。的确,无论您选择什么,都应该至少对Vim有所了解,因为Vim确实可以使用。


13

我从vi开始,先到emacs,然后到vim。我一直在考虑尝试Emacs,以查看过去五年中发生的变化。(谈到IDE,我已经有一段时间进入了Eclipse,但是我更喜欢将我的Mac连接到(丈夫的)Linux机器的终端窗口)。

粘贴的东西最近一直困扰着我。在Vim中剪切和粘贴比在Imacs Emacs中执行更多的步骤。从浏览器粘贴到终端窗口很烦人,除非您执行我不想做的事情,所以我忍受了奇怪的缩进。我认为,在emacs中编辑多个文件更容易。如果您在屏幕上同时显示两个文件,则至少要从一个文件跳到另一个文件。

我还没有玩过vi或emacs的精美功能,因为我只是想从事编码业务。我所需要的只是漂亮的颜色和适当的制表符到空格的转换(对于python尤其重要)。

我认为这全取决于您是否要使用:wqCtrl-x Ctrl-s(IIRC)保存文件,如果您不在乎这些花哨的东西。

@mgb是正确的。我一直在最低限度的Linux上来修复一个或两个月前在Debian发行版中的问题。vi是唯一可用的编辑器。


1
这仍然不是一件容易的事,但比调整使终端粘贴混乱的所有设置要容易得多。使用:set paste,然后粘贴您的文本,完成:set nopaste后将返回到正常模式。还有:set pastetoggle=<F2>一条命令将使用您选择的组合键切换此命令。
hbar 2010年

在缩进模式下,您可以^R^P+从剪贴板粘贴并保留当前缩进。 ^R^O+会缩进。 ^R+将插入它,就像您键入它一样。 :help i_^R^P有关更多信息。
直觉

3
我无法想象剪切/粘贴比容易yyp。另外,请参见此处在不同的窗口之间进行剪切和粘贴stackoverflow.com/a/8757876/654789
puk,2012年

@puk-在emacs中,Ctrl-k(猛拉)/ Ctr-y(输入)也很容易。在Emacs中,您还有多个寄存器(az),您可以将文本或当前位置保存到...
Kendall Helmstetter Gelner 2014年

3
vim也有多个寄存器
TamaMcGlinn

12

日常水平之间存在巨大差异-Vim(或任何vi变体)本质上是模态的(您进入无法编辑的命令模式)而Emacs(以及大多数其他编辑器)则不是。

当然,使用菜单等,您无需真正在Vim中进入命令模式-首先。但是,即使使用Vim功能的一小部分,您也可以。这是Vim / Emacs辩论的核心。

就个人而言,我也认为Emacs的可扩展性更高。您可以找到许多东西的Elisp软件包。

不过,我很好奇,为什么要考虑通过更传统的IDE学习其中之一。您想学习其中的一种是什么?


8
老实说,我只是想学习它,看看它是否能经受得住炒作。我已经看到了两者的灵活度,并且已经看到专家在其中做一些非常疯狂的事情,并且我想看看是否值得学习。另外,我的IDE不支持Lisp。:)
Sasha Chedygov

3
嗯 问题是Emacs太多了……但是我仍然要让IDE使用emacs的事情是一系列复杂的重复任务,这些任务我可以使用宏录制自动执行。例如,您可以采用当前的单词或表达式,将其复制到“缓冲区”中(认为剪切/粘贴只能有多个),然后进入另一个文件,部分使用复制的值键入一些文本,然后再输入一个同样复制值,前进光标,保存位置,然后再次返回第一个缓冲区...然后对原始文件的下一行重复该过程。
肯德尔·赫尔姆斯泰特·盖尔纳09年

1
我在vi和Emacs中都大量使用了Macros。您所缺少的是,事实是Emacs在使用宏时可以选择的方法要广泛得多,而且您可以在任何地方使用剪切缓冲区,甚至在搜索词中间也可以使用。请告诉我,您将如何编写一个宏,该宏将基于正则表达式选择表达式的一个单词,采用找到的术语,在该术语上搜索另一个文档,然后对其进行替换?
肯德尔·赫尔姆斯泰特·盖尔纳09年

2
@ kendall-helmstetter-gelner-这对于vimscript可能是可行的,或者vim具有绑定的语言(例如ruby / vim / tcl / perl)。您可以从脚本语言访问vim的所有功能和编辑器缓冲区。
segy

1
这令人印象深刻,但要在Emacs中执行相同操作,只需要使用我已经知道的击键即可形成一个复杂的宏,而不必手动将其写出来。任何知道emacs的人都可以很容易地创建一个执行该任务的宏,但是我要说的是,没有大量的VI用户就可以在没有大量研究的情况下构建您布置的宏。
Kendall Helmstetter Gelner 2011年

11

关于这两个编辑器,已经有很多话要讲,但是我只补充了5便士。两位编辑都很出色,您都不会错。

我是vi / vim用户已有15年了。我已经尝试过多次转换为emacs,但是每次都只是发现vim实际上可以开箱即用地完成丢失的事情,而无需编写Lisp扩展名或安装任何东西。

对我来说,vim使您可以使用环境/ OS,而emacs尝试封装或替换它,这在编辑器中的主要区别是。例如,您可以在vim中通过:r!date在文本中添加日期,或在:r!cal 1 2014中添加日历,甚至用内容的十六进制版本替换缓冲区的内容。例如。:%!xxd,编辑十六进制,然后返回:%!xxd -r,以及其他更多用途,例如内置grep,sed等。

另一个示例是与jq和一起使用gron。例如。将json blob粘贴到编辑器中,然后运行以进行转换:

:r!curl -s http://interesting/api/v1/get/stuff
:%!gron | grep 'interesting' | gron -u

要么

:%!jq .path.to.stuff

上面的每个管道命令都可以通过单独运行:%!<command>,其中%表示所有文档,但是也可以在选择,选定的行等上运行。这里gron output可以用作jq路径。

您还可以获得EX批处理编辑功能,例如。替换某些单词,重新格式化代码,转换dos-> unix换行符,一次对100个文件运行宏。使用ex可以轻松完成。我不确定emacs是否有类似的东西。

换句话说,恕我直言,vim更接近于unix哲学。它通常更简单,更小,但是,如果您了解自己的操作系统和工具,则可能不需要的东西就超过了它(VIM)所能提供的。我从来没有做。

除了vi是任何unix / linux系统上的事实上的标准外,为什么还要学习使用2个做同样事情的工具。当然,有些系统提供mg或类似的东西,但绝对不是全部。Unix + Vi <3。

好吧,就是我的5便士。


8
“ Vim更接近于Unix哲学。” -您在这里说的是关于Shell可用工具的理念。但是,外壳本身是内置,历史记录,globbing,过程控制,可编程性等的一大集合。Emacs显然更接近于unix shell的哲学:提供一个高度可定制的环境,在其中可以将工具一起使用,并使用户可以在工作时轻松使用自己的代码片段扩展工具集。我认为,我们可以看到,两者 的EmacsVIM都深深植根于Unix的传统。
马特

1
谢谢你的评论。 我决不是要在这里发动编辑战争,也不是要冒犯emacs用户。我只是发现从外壳(或从编辑器内部)调用实际命令更容易和更方便,而不是编写复杂的扩展以将功能封装在emacs中,这往往使环境随着时间的流逝而膨胀。但是,这些扩展取决于用户的首选项,并且可以完成,但绝不能由任何一个编辑器强制执行。因此,您对于UNIX传统中的emacsvi(m)位置表示同意。
2014年

1
为了继续进行非战争,我希望很明显,我没有不同意您的比喻“ vim更像是unix工具”。在我看来,这种直觉可以通过“扩展,而emacs更像是unix shell”。:-)
马特

@马特:我喜欢这个比喻。但愿如此。;)
Alex

2
您可以在emacs中完成您提到的所有操作,以及执行更多操作(例如,十六进制模式可以在侧面以ascii预览形式以十六进制编辑文件)。我也很了解VI,但是在Emacs中创建宏要容易得多且更加灵活,它甚至可以比大多数现代VIM实现做更多的事情。这就是知道它的原因,因为emacs在大多数地方都可以提供真正的文本编辑功能。
Kendall Helmstetter Gelner 2014年

10

对我来说emacs的优点是

  • tramp-mode允许您通过ssh编辑远程文件。就像本地文件一样。
  • 流浪者模式+烦扰=功能齐全的sftp客户端
  • 支持您将需要的每种语言。
  • 内置终端仿真器(术语模式),因此我可以保持编码而无需在应用程序之间切换。
  • 可扩展性任何您不喜欢的东西都可以使用Lisp进行更改。

11
FWIW:vim几乎有前3个(尽管名称不同。“ tramp-mode”在vim中是“ netrw”)。#4通常被认为是bug,不是vim用户的功能。如果用python / mzscheme / perl / ruby​​ / tcl / vimscript替换“ elisp”(我最爱Emacs的朋友告诉我,有史以来最糟糕的Lisp方言),则在vim中是#5。
劳伦斯·贡萨尔维斯

3
您能否评论为什么#4是错误?
Hamza Yerlikaya

2
退房Conque插件在VIM嵌入式外壳。
直觉

9

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


9

我想在这里引用《 UNIX编程的艺术》一书的引文:

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

通常,vi最适合小型工作-快速答复邮件,对系统配置进行简单调整等。当您使用新系统(或网络上的远程系统)并且没有随身携带的Emacs自定义文件时,此功能特别有用。

Emacs本身可以用于扩展的编辑会话,您必须在会话中处理复杂的任务,修改多个文件并使用其他程序的结果。对于在控制台上使用X的程序员(这是现代Unix上的典型情况),通常是在登录后不久在一个大窗口中启动Emacs并使其永久运行,这可能会访问数十个文件,甚至在多个Emacs子窗口中运行程序。

我在这里真正要强调的是:« 许多人发现了解两者都很有价值。»


这可能已经过时了。我认为Emacs拥有内置的浏览器,SSH,Music Player和慢速系统的功能,这些系统停止启动其他应用程序,使人们相信最好还是打开一个应用程序并坚持使用它?
Nishant 2014年

好消息是:这还不是过时的!您可以在Emacs外部使用浏览器,音乐播放器等,但是Emacs真正带来的是所有这些功能都具有相同的良好界面,并且是一种扩展它们的方式(Elisp)。
Andriy Tykhonov 2014年

根据我的观点,TAUP对Emacs的观点已经过时,因为那时Emacs具有一个优势,因为它是一个单独的应用程序,可以同时执行多种功能,如irc,音乐,远程编辑等。但是今天,您针对这些目的都有出色的应用程序,并且内存也不再像以前那样成问题了……想象一下在Emacs中阅读Gmail-我的意思是Gmail界面确实内置了很棒的键绑定,将其自定义为Emacs电子邮件客户端将需要大量时间,可能不如原始的Gmail界面等好。
Nishant 2014年

这不是过时的!:)
Andriy Tykhonov 2014年

>但是,今天您针对这些目的都有出色的应用程序是的,但是您拥有的所有这些应用程序都具有截然不同的界面,配置,用户体验等,等等……但是Emacs是唯一的工具!例如,我非常喜欢Emacs键绑定,我在浏览器的外壳中使用它们。至少在应用程序中某些事情是相同的,这是非常好的……
Andriy Tykhonov 2014年

9

Emacs的好处

  • Emacs具有非模式界面(默认情况下)和模式界面(例如,它可以通过Evil,Viper或Vimpulse仿真vim和vi)。

  • 最移植的计算机程序之一。它可以在多种操作系统上以文本模式和图形用户界面运行,包括大多数类Unix系统(Linux,各种BSD,Solaris,AIX,IRIX,macOS等),MS-DOS,Microsoft Windows,AmigaOS,和OpenVMS。Unix系统(免费和专有)经常提供与操作系统捆绑在一起的Emacs。

  • Emacs服务器体系结构允许多个客户端连接到同一Emacs实例,并共享缓冲区列表,终止振铃,撤消历史记录和其他状态。

  • 普及的在线帮助系统,具有动态记录的键绑定,功能和命令。

  • 可扩展和可定制的Lisp编程语言变体(Emacs Lisp),具有以下功能:

  • 功能强大且可扩展的文件管理器(内置),集成的调试器以及大量开发和其他工具。

  • 使每个命令成为Emacs Lisp函数可以通过以编程方式响应过去的操作和文档状态来使命令进入DWIM(执行我的意思)。例如,如果存在一个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脚本或API可以针对Python,Ruby,Perl和Lua等解释语言进行扩展和自定义
  • 无处不在。基本上,所有Unix和类似Unix的系统都内置有vi(或变体)。在POSIX标准中指定了Vi(而不是ex,但不是vim)。
  • 系统救援环境,嵌入式系统(尤其是带有busybox的系统)和其他受约束的环境通常包括vi,但不包括emacs。

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


7

现在,由于Spacemacs,您甚至无需考虑这两者之间的区别。它是社区驱动的Emacs发行版。

正如它所说的

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

Spacemacs结合了Emacs和Vim的优点,使您的生活和工作更加轻松。

参见下面的截图,


(来源:spacemacs.org


3
这是作弊...这是带有一些时髦配置的emacs;)实际上有很多配置
Alex

2
这很棒-当它起作用时。如果还不行,那么-如果您还不了解elisp和emacs,或者在gitter chat中找不到核心贡献者,那么您通常会陷入困境,并且运气不佳。(尽管有时删除.emacs中的melpa目录可以解决问题,但是...)
Aaron Hall

1
尽管它比我需要的东西多得多,但我对Spacemacs感到非常满意。我在github上有我的dotfiles,所以我可以轻松/快速地设置新机器,并且由于我使用了邪恶的(vim键盘绑定),所以当我不得不在无法安装spacemacs config的机器上工作时,我有足够的技巧来解决。
anr78

6

对我而言,选择在vim上使用emacs的最大区别是emacs中内置的gdb支持。Vim的默认发行版中未包含此功能,因此在那里集成gdb和vim的项目几乎无法与MacVim一起使用


1
我用Vim的编辑和Xcode中进行调试,这是不太理想,但可行..
StackedCrooked

4

它像苹果和桔子。两者都有不同的设计和理念。Vim是文本编辑器,而Emacs是执行文本编辑的Lisp解释器。

我之所以使用Vim,是因为它速度快,隐秘并且非常擅长处理文本。它具有可组合的自然键绑定,可以使您的开发任务真正协调一致。Vim是基于简单的* nix哲学,将一件事做得非常好-即文本操作。

使用bash / zsh和tmux扩展Vim通常很容易,并且可以使您学到很多东西。恕我直言,这是一个很好的学习曲线。关键是要学习如何集成这些东西以获得更大的工作应用程序。使用Vim,您将需要学习集成,因为除非您告诉它如何操作,否则它不会自然集成。我使用的另一个有价值的扩展是Tig。它是基于ncurses的Git前端。我只是有一个绑定,它会以静默方式打开Tig,然后在那里执行所有Git任务。

由最终用户决定最有效的方法。Emacs和Vim经受了时间的考验,证明了他们的价值。最终,一个好的程序员只需要一支笔和一支纸就可以发挥创造力。好的算法不需要编辑器来支持它们。因此,请同时尝试它们,看看是什么使您效率更高。并从这两个软件中学习设计模式,因为有很多东西要学习和发现!



3

Emacs实际上更多的是做任何事情的程序,而vi(m)实际上只是一个编辑器。如果您正在编辑文本,它们都很好,但是我更喜欢emacs,这仅仅是因为我必须移出主行才能四处走动,并在命令模式下继续键入错误的内容。如果您没有这个问题,vi(m)可能是您的编辑器。


2

黄疸病的观点:

vi(不是vim)是专业必需品。无论环境如何,您总是可以轻松获得某种形式的vi。您可以在vi中运行,而在emacs中,则可以在vi中使用unix-land构建bash命令。

由于政府和公司对已发布标准的遵守,即使是Microsquish也必须支持vi(尽管他们很好地隐藏了它)。

我认为,如果您在繁忙的环境中动手做事,而不是在开发环境中或学术界将温室花局限于一个花哨的钻机,那么对花哨的编辑者要了解很多是一项工作上的障碍。不要学习vim或emacs中所有花哨的技巧,也不要开发大量的宏来使编辑环境顺应您的意愿。当您参加在工厂环境中可能无法证明的不同机器时,这将浪费大量的时间。

阅读比尔·乔伊(Bill Joy)的论文-这是非常非常有能力的,甚至是非常漂亮的工程练习,可以非常非常快地编辑纯文本。帕里托的规则在这里适用:80%的水果在20%的篮子中。非常快速地编辑纯文本是编辑能力的关键-其他都是可选的-有时会很麻烦。


3
你在说哪篇论文?如果没有链接,您至少可以给一个名字吗?
darkfeline 2014年

2
“即使MS也必须支持vi。” 你可以备份吗?
dodgethesteamroller 2014年

1

如果您从一个站点到另一个站点移动很多,或者您的工作涉及登录生产系统,那么vim是您的最佳选择。

默认情况下,所有* nix机器都将安装vi。

大多数sysdamins都将ksh作为默认的shell。ksh使用vi(或emacs)命令击键来搜索历史记录并编辑命令行。

如果您不太了解vi,则当您使用标准配置登录到unix框时,您会严重残疾。

仅出于这个原因,我建议您将vim用作日常编辑。我见过emacs爱好者在试图修改裸露的unix服务器上的配置文件时大发雷霆。


1
对于bash,请尝试set -o vi在中使用.bashrc,而不是set -o emacs默认使用的。我从未使用过ksh,但是可能是一样的。
sjas 2013年

1

在您的问题中,您没有提到要在Lisp中编程!但是,当您评论您的答案时,我了解到您实际上需要一个LISP编程接口。

对于这项精确的任务,只需忽略Vi。Emacs与LISP的集成很棒!您应该使用SLIME。然后,您将与REPL进行出色的集成,能够将eval功能,缓冲区或文件直接集成到emacs缓冲区中正在运行的解释器中,等等。


1
是的,我知道这一点,但是我寻找一个像样的Lisp编辑器并不是我问这个问题的原因-只是一个例子。谢谢您的回应!
Sasha Chedygov

1

我已经在生产/研究环境中使用spacemacs大约两年了,而与neovim一起工作了大约一年。Spacemacs是emacs,具有几个不错的附加功能,例如图层等。neovim再次是vim的一个分支,具有一些附加功能。

我对他们两个人的经验都不满意。而且,我仍在寻找满足我的文本编辑需求的长期解决方案。

这是一个简单的比较:

  • Neovim,vim,emacs,spacemacs等所有这些编辑器比大多数编辑器消耗更少的资源。

  • Neovim / vim比emacs快一点,比spacemacs快得多。

  • 在编辑经验方面。我可以轻松地说emacs软件包感觉更出色。我认为这是因为它们与emacs的核心更好地融合在一起。

  • Vimscript很不错,而且vim生态系统中当然也有很多伟大的项目。好消息是,与迄今为止我见过的大多数emacs项目相比,它们的文档记录更好。

  • 两者都可能会出现故障,具体取决于您使用的软件包。Spacemacs倾向于冻结,而Neovim倾向于显示可怕的错误消息,因此请在此处选择毒药。

  • vim中的模态编辑不是一个直观的概念,但是一旦习惯了,就想要它。两个编辑器都提供了这一点。


1
“一旦适应了模式编辑(...),就可以使用它” –很有意思。我花了数年时间在邪恶模式下使用Emacs,并习惯于模式编辑,现在又回到了非模式……感觉好多了。我认为这不仅取决于人,还取决于上下文/生活中的时间/任何事物。我想尝尝。:)
周杰伦

1
@杰伊,我想,但是您是否想念诸如列选择之类的东西,并以“:XX”跳转?
Kaan E.

并非如此...有时我使用Emacs的矩形选择,而不是:xx而不是“ Mg g XX”-几次击键,但我很少需要直接输入一行。通常,一个Emacs应用程序(调试器等)会将我发送到正确的行。
周杰伦

0

击键执行::: vi编辑保留键入的键的每个排列。这将在决策树中创建明确标识任何命令的路径,而Emacs命令是立即执行的类型化键的组合,这使用户可以选择是否使用命令。

内存使用率和可定制性::: vi是一个更小更快的程序,具有更大的自定义容量,而Emacs需要更长的启动时间并需要更多的内存。但是,它是高度可定制的,并且包含大量功能,因为它本质上是设计用于文本编辑的Lisp程序的执行环境。


0

vim是一个方便的编辑器,您vim filename只需键入即可打开文件,进行编辑,保存和关闭。

emacs是一个伪装成编辑器的“操作系统”,您可以eval编码以更改其行为,并根据需要进行扩展。一个mode关于emacs的接收/发送电子邮件就像是操作系统上的电子邮件软件。

在进行简单编辑(例如,修改配置文件)时,我使用vim

否则,我永远不会离开emacs


0

我认为主要区别在于设计目标。VIM是UNIX上的有效编辑器。Emacs适用于GNU和Lisp黑客,因此它具有一些混合的设计元素。

我在工作站上使用vim,同时也喜欢emacs。


0

我是Emacs的粉丝,但鼓励其他开发人员学习VI,因为:

  1. 您可以使用VI编辑emacs生成文件。
  2. VI包含ed命令,每个UNIX用户都应知道ed和sed。

我注意到有关VIM的启动速度比emacs快的几条评论。如果您真的很在意,请在服务器模式下运行emacs并将别名“ emacs”命名为“ emacsclient”。客户端非常快,因为它要做的就是轻按肩膀上的服务器,并告诉它要编辑哪个文件。在MacOSX上,emacsclient仅33K,而emacs为287M。

我不确定这在现代硬件上是否必要。在我的MacBook Pro(2013 Retina)上,当我从外壳运行emacs时,它几乎立即加载。我没有发现任何暂停。当我运行Emacs.app(GUI版本)时,可能需要3秒钟。

我听到的有关emacs的大多数抱怨似乎来自对emacs误解的人。自1982年以来就使用vi和emacs,我绝对记得有一次emacs的加载速度比vi慢得多,并且使用了我早期的UNIX机器中的大部分物理内存,但是现在已经不再如此了,并且至少已经有15年了。 20年。

我承认的一个投诉是“ emacs pinkie”。当我年轻的时候,这从来没有打扰过我。现在我58岁,我的小指反复进入Control键进行emacs和弦的操作确实有点痛。在MacBook Pro键盘上尤其如此,在该键盘上,将Control向右移动一个位置以为“ fn”键腾出空间。当Control是左下角的键时,这并不令人讨厌。


您还可以“转储” emacs,这基本上意味着对所需的已编译elisp扩展进行快照。Emacs以此方式启动的速度要快得多,但是要花一点时间才能确定要包括哪些扩展。
Phil Harbison

另外,您可以在emacs中播放“河内之塔”。多么酷啊?:)
Phil Harbison

回复:“ emacs小指”。在某些较旧的键盘(例如HHKB Professional所基于的Sun Type 3/4)上,该控件放置在大写锁定正常的位置。我没有您所拥有的emacs经验,但是,我很快就习惯了在主行使用Control。如此之多,以至于我在所有键盘(MacBook Pro也是如此)上进行了更改。该HHKB有一些进一步的改进,例如,退格键的正上方进入,和Esc键旁边的1
martinweiss

@PhilHarbison可以详细说明“转储”吗?
A_P

0

我首先是vim的用户,然后我切换到emacs,然后又切换到vim,现在我再次尝试emacs。

  • 两位都是出色的编辑。
  • 两者今天都非常可扩展
  • 两者都有出色的插件和社区

作为开发人员,我们需要输入很多内容,最后对我来说,在缓冲区和文件中移动是最大的重复任务,因此我需要一个可以快速移动的编辑器!

再次尝试emacs的动机是,我认为Ctrl引导键绑定比vim更快,并且更容易推理。

在vim中,您有各种模式,有插入模式,可视模式,普通模式,按某项操作时发生的情况取决于您所处的模式,这是有状态的编辑方法。您进行移动,进入插入模式,进行编辑,退出插入模式,然后再次移动。如果我错过电调新闻或诸如此类的事情,我经常会迷失自我。

在emacs中没有任何模式,基本上是用粉红色按Ctrl并键入击键,例如Cx Cf,Cx Cs,Cx Cc。在某些需要释放ctrl键的键绑定中,我讨厌此键绑定,并始终将其替换为按下了控制键的键绑定。

我认为emacs方法的思考和键入速度更快,但是vim具有另一种优势。它的命令是可组合的,它们通常具有format。例如,要删除一行,可以使用dd,删除一个单词dw。插件利用了这种感觉,通过vim-surround插件,您可以使用ds“删除引号(删除包围号”),最多删除next / dt/。删除前一个/ :dT/,依此类推。因此,只要您学习了动感的东西就开始变得非常有趣。

总结一下,今天我跌倒了,emacs快捷键绑定对于宏编辑而言是更快的,而vim命令对于微编辑而言则更加强大

在过去的五年中,我一直在使用vim,所以我主要编辑关于单词,线条,周围,块等的想法。删除此行,删除引号,替换引号,删除光标中的单词,我试图找出emacs为此

最后,我要说的是,我更关心fzf而不是emacs或vim,我很想拥有一个完全基于fzf的编辑器


-8

首先,今天不使用Vi(原始实现)。您说的是Vim的一些派生。

要扩展Vim功能,必须重新编译Vim,而不是Emacs。

Emacs具有Vim自身(毒蛇模式)。

Emacs通常需要手动安装,Vim通常预先安装在所有Unix上,例如OS(但是,如果您可以通过ssh访问主机tramp-mode win Vim :)。

如果您尝试使用Vim,则会讨厌Emacs,因此请先从Emacs开始。

另请阅读http://www.dina.dk/~abraham/religion/vi-tutorial.html(链接断开,请使用this

在hxxp://en.wikipedia.org/wiki/Editor_war中进行Anwer搜索


8
您不需要重新编译vim来扩展它。您甚至不需要退出vim。
太多的PHP

1
vimscript / Python / Ruby / etc可以访问所有Vim内部结构吗?编辑器代码库是否有助于在EDITOR的复杂性的一个层次上进行扩展或扩展的复杂性?
Givenkoa

1
许多Vim脚本,例如智能MACROS。要扩展Vim,您需要插件((
gentnkoa

1
不使用Vi吗?!?!什么?nvi被认为是原创的吗?还是“传统vi”?FreeBSD,ArchLinix等许多系统都捆绑了传统的vi或nvi,对此我感到非常感谢。像Debian这样的某些系统默认使用兼容模式的vim(感觉就像传统的vi)
Alex

1
@gavenkoa,我完全同意Alex,您显然从未尝试过需要手动安装的系统,例如Gentoo,某些BSD或Arch Linux。另外,«如果您尝试使用Vim,您会讨厌Emacs,所以请先从Emacs开始。» 如果您想一点的话,会让我先尝试VIM,您也可以。这使我想起有人说不要先尝试函数式编程。真遗憾,我没有尽快尝试...
JMCF125
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.