Is it worth investing time in learning to use Emacs?就在前面:我不想发动一场宗教战争。 我使用vi的时间已经很久了,而且几次尝试使用Emacs时,我已经迷失了方向,以至于我迅速放弃了。 但是,许多人发现Emacs非常强大。 它的可编程性有点传奇。 我主要从事Solaris + Java开发,我想问一个简单的问题:如果我花时间在Emacs上,我的工作效率会提高吗? 它在Vim上提供的功能是否会在合理的时间内回报生产率的提高? 重复:我不希望"我的编辑器比你的编辑器好"的答案。 对于是否值得花费时间,我只想是或否的答案。 我的生产力会真正提高吗? [免责声明:就我个人而言,我更喜欢Vim。免责声明免责声明:请继续阅读。]
Vim的优点在于:通过将动作和动作分离开来,并为复杂的重复操作提供便利,您只需短短的按键操作就可以执行功能强大的编辑操作。在正常的编辑过程中,您可以轻松地在Vim中执行操作,这将需要您深入到Emacs中的脚本编写。而且,您使用的大多数功能都是开箱即用的,因此,即使您进行了广泛的 Emacs的出色之处在于:通过将其所有UI概念直接映射到Elisp中的基本构造和概念,可以很容易地在全球范围内针对特定类型的文件或环境引入功能,从而使Emacs变得像基于文本的结构一样得多Excel的可编程形式。假设您将花费大量时间根据个人需求和喜好自定义环境。当然,Emacs尽最大努力使您可以轻松地留在一个环境中,以完成您可能想做的所有事情。 最终,两者都不是上乘的。他们提供不同的样式,并且根据您的个人喜好,一种或另一种将适合您的个人需求和更好的思维方式。当然,了解两者(以及更多的编辑器)总是有帮助的。但是您将不会以这种方式提高生产力。 与vi相比,我更喜欢emacs,但是我对两者都感到满意。 您可以在emacs中做一些事情,使其比vi更强大,但并非所有这些都与编程有关。 (您可以在vi内发送电子邮件或阅读新闻吗?否,但是谁在乎?)如果您对lisp感到满意(我不是),则可以编写附加组件,模式和内容来谋生更容易,但这只是语法着色和花括号匹配以及类似的吸引人的事物。 我现在将不再闲逛。使用emacs会提高您的生产率吗?没有。 更新:请参阅下面我的评论。自从发布此文章以来,我发现使用emacs比使用vi更有效率。 vi是一把菜刀。 vim是一把非常好,锋利,平衡的厨师刀。 Emacs是轻型军刀。 大多数时候,我的工作要求我切蔬菜。有时,我必须承担一整队机器人。 我使用Emacs已有20年了。我现在使用名为" It's All Text"的小部件输入Emacs,使我可以在Firefox的文本框中输入文本。我在Emacs中可以走得很快。没有它,我的工作效率会大大降低。 这是有争议的,但是我也认为学习Emacs可以教给您关于编程的惊人知识。 根据您的编码方式,您可能会看到生产率的提高。对于背景,我也是vim的长期用户,但是大约2年前我学习了emacs,现在可以互换使用它们了。 使我真正学习emacs的要点是它具有一次打开大量文件并在它们之间轻松切换的有用功能。我正在介绍一种功能,该功能添加并涉及了许多类。 (这是C ++,因此每个类通常有两个文件。)由于我仍在确定接口,因此当我意识到需要更改另一个文件时,通常将在更新一个文件的过程中。 使用gvim,最简单的方法是为每个文件打开一个新窗口,该窗口开始变得笨拙。但是,使用Emacs,可以在同一窗口(Ctrl-x,Ctrl-f)中打开新文件很简单。一旦Emacs打开了文件,就很容易在打开的缓冲区(Ctrl-x,Ctrl-b)之间来回切换。 更进一步,单个emacs会话可能会打开许多??窗口,因此,除了垂直拆分窗口外,我还可以决定在不中断文件工作的情况下,打开文件旁边的另一个文件,从而使我可以有效地并排工作:同时仍将每个窗口保持在默认的80个字符的宽度。 我发现在vim中还有一些更容易的东西(例如块选择模式,简单的宏录制,差异模式)以及在Emacs中更容易的东西(行对齐,文件/缓冲区管理,窗口/屏幕管理)。因此,我发现自己在两者之间交替(有时同时使用两者),这取决于我预期的编辑任务。 如果您仍然不确定,建议您尝试一下。在Emacs教程中运行,然后在很大程度上依靠帮助的情况下,使用它来编写代码,每天早上或一天。如果您仍然不喜欢所看到的内容,请继续使用vim。不管编辑器带来了什么,到目前为止,您对该工具的熟悉程度和知识将是您提高生产力的最重要因素。 我不想进行一场神圣的战争,但请回答是/否,回答一个高度主观的问题。 是的,由于功能强大,您可能会看到生产率提高。 不,您不会看到生产力的提高,因为emacs中使用的模式和隐喻可能与您的大脑不一致。 您问题的简短答案是"是"。下面有更多详细信息。 好。 我大约从1980年到1991年几乎只使用vi。唯一不使用vi的地方是我处理的是Unix最小安装版本,该版本太小而无法包含vi,因此我不得不退回到ed,即原始vi所基于的最小编辑功能子集。 好。 从1985年左右开始,我工作的其他程序员一直在赞美emacs。但是每次我尝试学习它时,我都不会走得太远。我花了一个小时来阅读emacs turorial(C-h t),到最后,我只知道如何插入和修改文本以及在屏幕上四处移动。使用vi可以做的事情比我那小时用emacs学到的东西要多得多,我无法进行切换。三个月后,我发现时间又花了一个小时,最终我不得不阅读相同的材料。 Emacs的学习曲线为大写" L"。直到我签了一份合同,其他人都使用了emacs之后,我才最终决定我需要花一个多小时来学习它。花了一天多的时间,除了完成本教程和随附的文档之外,什么都没做,我终于到了可以用emacs做我无法用vi做事的地步。从那时起,我再也不想回头了。我仍然可以在睡眠中键入vi命令,但是我可以使用emacs做更多的事情。 好。 了解我在比较emacs和vi,而不是vim。我从未学习过vim添加到vi的扩展,并且很可能其中许多是从emacs复制的功能。如果是这样,并且如果您已经精通vim,那么emacs可能对您没有太多好处。 好。 在emacs中,我一直依赖的东西包括: 好。 使用emacs时,所有内容均视为文本。这意味着您可以使用几乎相同的命令来操作任何缓冲区中的任何数据。而且,如果缓冲区处于某些标准命令不可用的模式,则可以将文本复制到以基本模式运行的另一个缓冲区,然后在其中使用标准命令。 好。 Emacs提供了可在字符单元终端上显示的多"窗口"环境。在位图图形和实际窗口出现之前的几天,编写了emacs来模拟类似于窗口的行为,只使用ascii字符和光标定位。您可能在想:"那是古老的历史。为什么今天有人应该在乎呢?"我仍然每天都使用该功能。我使用允许我进行SSH访问的网络托管公司。因此,我可以通过Internet登录到Linux主机并运行Shell命令。尽管功能非常强大,但能够使用emacs将终端仿真器划分为"窗口",在其中几个"窗口"中运行shell,在其他窗口中编辑文件,以及在其他"视窗"。 好。 实际上,当我在上一段中说"窗口"时,我的意思是"缓冲"。 Emacs的Windows字符单元格仿真是一种划分屏幕不动产的方法。 emacs缓冲区与当前可能显示或可能不显示的内容(文件,bash shell,目录,与文件不相关的任意文本等)相关联。要查看缓冲区中的内容,请选择一个窗口并告诉它要查看的缓冲区。因此,您可以做的事情比屏幕上有足够的空间来显示。它与您对窗口进行图标化/取消图标化时在现代位图图形GUI中的操作大致类似。 好。 我已经暗示了您可以在emacs缓冲区内运行shell的事实。您可以根据需要使多个缓冲区运行shell。您可以在Shell缓冲区和文本文件之间来回复制和粘贴文本,或者使用与复制文本或在两个不同的文本之间进行比较的完全相同的击键序列,在Shell缓冲区和文本文件之间比较文本的一部分。文本文件。实际上,这对于大多数类型的缓冲区都是正确的,而不仅仅是Shell缓冲区和与文件关联的缓冲区。 好。 当您使用emacs的命令打开文件,但实际上选择的是目录时,缓冲区以dired(目录编辑器)模式运行。在此模式下,一次击键将打开光标当前指向的任何位置,无论是文件还是子目录。转向模式下的缓冲区是文件管理器,它是字符单元终端,类似于Mac或Windows资源管理器上的Finder。 好。 我几乎经常使用的emacs功能之一是"比较窗口"。与命令行内置的" diff"或GUI比较工具(例如Eclipse内置的工具)相比,我更喜欢此方法。 Diff或Eclipse比较整个文件,并向您显示哪些行不同。但是,当您有两条看起来非常相似的不同线时会发生什么?考虑以下: 好。 这条线和另一条线有什么区别? 好。 这条线和另一条线有什么区别? 好。 您发现差异需要多长时间? (提示:ASCII和Unicode撇号看起来非常相似。) 好。 与diff和Eclipse仅显示不同的行不同,emacs的"比较窗口"功能是交互式的。您将光标定位在两个并排窗口中的每一个窗口内容相同的位置。运行"比较窗口",每个窗口中的光标将移动到第一个不同的字符。将光标重新放置在一个窗口中,使其与另一个窗口相同,然后重新运行"比较窗口"以查找下一个差异。这使得比较文件的子部分变得容易。 好。 我经常使用"比较窗口"进行比较的另一件事是比较校验和。许多软件项目在页面上分发应用程序的压缩文件,该页面也包含压缩文件的MD5哈希。因此,如何比较分发页面上的MD5哈希值与从下载文件中计算出的MD5哈希值。 Emacs做到了这一点。 好。 首先,将网页上的MD5哈希值复制到新的emacs缓冲区中。然后,在下载.tar.gz文件之后,运行: 好。 md5sum downloadfile.tar.gz 好。 在外壳缓冲区中。将这两个缓冲区显示在并排的emacs窗口中,将光标置于每个校验和开头的窗口中,然后运行" compare-windows"。如果它们相同,则每个窗口中的光标将位于每个校验和的末尾。 好。 在上一点中,我给出了在行上运行"比较窗口"的示例: 好。 这条线和另一条线有什么区别? 好。 这条线和另一条线有什么区别? 好。 "比较窗口"将光标留在每行的撇号上。因此,现在您知道哪些字符不同。但是他们是什么角色?键入两个击键命令CTRL-x =,emacs将显示字符,其ascii值以八进制,十进制和十六进制显示,从文件开头的字符偏移以及从行开头的字符偏移。由于ASCII是7位编码,因此所有ASCII字符的高位均已关闭。一旦看到第一个撇号的值是0x27,第二个撇号的值是0x92,很明显第一个撇号的值在ASCII字符集中,而第二个不是。 好。 Emacs是最早的IDE之一,也许是第一个。它具有特定语言的模式。我发现它们很方便,因为它们在我的代码上使用一致的缩进以使其更具可读性。还具有用于编译和调试代码的内置功能。我没有使用太多的编译功能,因为当我编写像C这样的编译语言时,我习惯在shell提示符下执行该操作。对于C和C ++,调试功能非常好。它以某种方式将gdb与编辑器集成在一起,使您获得的功能几乎与Eclipse中现在的调试功能相同,但是并没有浪费基于现代GUI的IDE的屏幕空间。从理论上讲,调试器集成应该很容易使它几乎可以应用于任何其他语言,但是我现在还没有检查过它可以与哪些其他语言一起使用。 好。 Emacs允许您通过告诉宏何时开始记住您键入的内容以及何时停止来创建宏。这对于您经常执行的任务非常强大。 好。 如果您了解Lisp,Emacs可以无限扩展。但是,即使我从未学过Emacs Lisp,我仍然发现Emacs是我使用过的最强大的工具之一。 好。 Emacs键绑定。我将是第一个承认Emacs键绑定很烂的人。但这比我用过的其他任何功能都强大得多,我愿意忍受这些键绑定。 好。 从幽默的角度来看,几年前,Emacs的作者Richard Stallman(也是GPL的创始人,GNU项目的创始人和FSF的创始人)嘲笑了将vi与emacs视为一场圣战的人。他发明了埃马克斯教堂的角色" Saint IGNUcius"。斯托曼(Sallman)用这种幌子评论道:"有时人们问我,使用另一个文本编辑器vi在Emacs教堂是否是罪过。好吧,vi vi vi确实是野兽的编辑器,但使用的是免费版本vi并不是罪,而是not悔。" (请参阅/d/jc/2023041411/5q1kpy323er46.webp) 好。 好。 我使用Vim已有10年,直到2年前才开始研究Emacs。我对我的生产率曲线随着时间的变化有一个相当新鲜的回忆。 我的观点都是有条件的,具体取决于您的长处和经验。 如果您使用Unix和命令行的时间足够长,以至于它们在Shell上起作用时熟悉Ca,Ce,Cn,Cp,Ck,Cy等,那么过渡到使用这些相同的绑定将花费很长时间(默认值)。我最近发现XCode也使用这些绑定。 如果您对始终运行的编辑器感到满意,可以对缓冲区进行管理(就像浏览器选项卡一样),然后将其置于应用程序中(就像在浏览器中使用Web2.0应用程序一样),那么Emacs可能会立即提高生产力。 如果您通常在许多相关文件的项目中工作,那么这种持久性在维护该缓冲区的上下文方面会带来一些额外的好处。每个缓冲区都在其打开的文件中关联,从而可以方便地为该项目使用各种提高生产力的工具(例如grep-find,eshell,run-python和slime)。尽管是临时性的,并且根据您的配置进行了个性化设置,但文本完成,yasnippet等却开始看起来像IDE一样很小。这与ECB等更为文明的类似于Emacs IDE的服务不同。 最初大约一周的时间里,我不断按Esc-Esc-Esc-Esc组合键输入" jjjkkk",对我的生产力产生了巨大的影响。接下来的一周,我谨慎地开始使用正确的导航键。然后我发现了配置文件...老实说,如果我从一开始就拥有Emacs入门工具包,我会说我的生产力在3-4周内慢慢恢复到了同等水平,但是我确实不喜欢配置文件。不过,我的一位同事刚刚从vim过渡到了emacs,他只是抓住了入门工具包,就在路上。在第一周,他似乎很舒服,享受着所有的惊喜(这种感觉可能会持续十年)。 最后,如果您犯了错误,您将立即从圆形的kill / yank环和undo环中获得生产力(和信心)。我个人也是特定区域撤消的粉丝。 我的简短答案是,是的,要花3到4个星期来减少生产力的损失,以学习Emacs。即使您决定使用简化的unix实用程序组合而不是Emacs进行开发,您也会从中得到除编辑器之外广泛适用的知识。 Emacs文档是一个森林。当我意识到Vim的文档组织得井井有条,以及许多功能的融合程度时,我从Emacs来到了Vim。我不知道Emacs专家会遇到什么问题,但是我会警告您,学习在其中做任何有用的事情都需要很长时间,并且不会使您在nethack上变得更好。坚持使用Vim。 Textmate是Mac上更好的Emacs,尽管使用Solaris并不能帮助您。 Eclipse很酷,并且有很多插件。 如果您愿意学习和自定义Emacs以满足您的需求,它将提高工作效率。大多数人不是。为了提高工作效率,您必须使用该工具进行简单的编辑以外的其他操作-大多数人从未超越简单的编辑。 这是一个快速测试:您是否已自定义窗口管理器以使您的环境更高效(旨在满足您的需求)?如果为"否",则可能无法通过学习emacs获得投资回报。 话虽这么说,但是如果您正在开发Java,则Eclipse是标准答案,因此您的问题很无聊。
我对Vim感到非常满意,但是一旦听说组织模式,便开始学习Emacs。 我爱emacs并每天使用。 就是说,我不认为学习的成本会被生产力的提高所弥补。 如果您正在编程Java,则需要一个良好的IDE。 Emacs为成为一体而走了一条公平的道路,但是让我们面对现实吧,IDEA等人击败了它。 (emacs可能启发了很多这些IDE,但这是另一回事了)。 我曾两次尝试学习Emacs。它根本不适合我的大脑运作,因此我不使用它。 Emacs(或vim)并没有明显优于vim(或Emacs)。两者都有很多选择,可以使他们做得很棒。我毫不怀疑,您可以在Emacs中完成的任何事情,也可以在Vim中完成,但这不是标准的事情。 试试Emacs。看看是否更合适。这是不输的情况。 不(而且我都用过)。
vim和emacs,它们是功能最强大的编辑器,并且已有相当长的历史了。
但是,考虑一下自从什么插件可用以来,总是一个好主意。 /约翰 我想进一步研究emacs,但是我不能长时间使用它。它伤了我的手。我做错什么了吗? 沿着不寻求宗教战争的思路(但是如果您认为必须,请继续反对我),为什么您觉得vi的唯一选择是emacs?是您开发的操作系统,还是只是您探索的选项? 目前,Java开发环境拥有一些最好的IDE(免费和付费),甚至在代码编辑和重构支持方面也不是最好的。IntelliJIDEA甚至还提供了一个vi插件,可以帮助您感到宾至如归,例如(不确定类似的东西是否可用于Eclipse)。虽然更换工具确实意味着学习曲线,但如果跨越足够大,花时间去做可能是值得的。 您输入的速度有多快?如果您狩猎和啄食,那么emacs不适合您。如果您的速度很快,则可以不必一直抓鼠标。 通常,emacs比vi更强大。您可以在emacs中做更多的事情。 学习Emacs的一个好理由是因为其他程序也使用Emacs键盘绑定。例如,您可以在bash提示符下使用Emacs键盘绑定,或者使用GNU readline进行任何其他操作。最好学习Emacs中的基本动作和单词/行删除以及撤消/重做和弦,以便可以在其他程序中使用它们。即使您不再使用Emacs,使用其他工具也会提高生产率。 我知道Vim和Emacs,Vim更适合我的大脑和习惯。但是其他人也对Emacs持相同观点。除非您尝试,否则您永远不会自己知道。花费足够的时间来充分了解Emacs,看看您是否会喜欢它。 由于vi / Vim和Emacs在可以做什么或不能做什么方面非常接近,因此这两个编辑器的工作效率来自使用它们的经验。 我认为,作为一名程序员,开始使用Emacs不会花很长时间。别人只能说那么多,您必须自己尝试一下才能知道。 至于我,我都使用。这就像在战争中使用不止一种武器,在适当的情况下使用正确的武器。 ;)
对于前几天/几周,绝对不是。 在您每次想要编辑某些内容时都不必阅读本教程之后,请确保。 Emacs比vim更"强大",它的脚本引擎更加灵活,并且围绕emacs构建了更多的脚本,模式等。 就是说,事实恰恰相反。如果您花费相同的时间来提高对vim的了解,您可能会同样高效。
也许不能以相同的方式产生效果-我想说vim可以更快地编辑文件,emacs可以更好地完成其他所有工作(同样,我个人会说 我同意艾伦·斯托姆(Alan Storm)的观点:"因为Emacs中使用的模式和隐喻可能与您的大脑不一致" 这是一个非常重要的因素。不同的大脑对不同的界面会有不同的适应。
我非常喜欢Emacs的一些主要功能(易于使用),我认为它们可以提高生产力: 最终,如果Emacs的理念吸引您,您将付出更多的努力来学习它。它将奖励您。 如果您决定花时间对文本编辑器进行编程,那么您的工作效率将会提高。在这两个编辑器中,emacs提供了更好的框架或不断的定制。如果您不对文本编辑器进行编程,那么请保持舒适。 我喜欢Emacs,您可以根据需要扩展它-在我眼中,您可以自己扩展的任何系统都是值得奖的。 如果您担心手的健康,请选择Vim。 过去,我遭受了RSI的冲击,发现其中一个主要的罪魁祸首是"和弦",即同时按住许多键。 Emacs广泛使用和弦,而VIM使用快速连续链接的单个字母命令。由于肌肉不必扭曲和扭曲即可在编辑器中执行命令,因此这对您的手造成的压力要小得多。 RSI造成的伤害可能会破坏您的生产率,因此在计算时一定要考虑到这一点。
免责声明:我是无知的。我已经使用emacs大约4年了,而使用vim大约6个月了,如果您一直数着我一直在学习和讨厌的时间,那么可能更像是15。 (写作与移动模式的区别使我丧命。每次。如果它没有杀死你,那么我的观点可能就一文不值了。)也就是说,我认为我的观点实际上与我所见过的其他26种观点截然不同。在这里,所以我要发声。 我的意见:
当我需要同时理解和破解8个文件时,Emacs作为带有多缓冲区的平铺窗口管理器的属性(缓冲区与文件的对应关系为1.2:1,它们通常是同一回事,但不一定)regexp -搜索(和替换)是不可思议的。
如果由于外壳中的
Emacs的编辑命令在键入时更容易获得,这一事实使键入比在Vim中快得多。 我在Emacs中打字更快,更快。这意味着在Emacs中像Org Mode这样的东西(我用于所有工作:TODO列表,错误跟踪,注释,长长的电子邮件,文档...)对我来说比对Vim更有意义。 而且,即使很糟糕,Elisp也令人难以置信。它完全弥补了Emacs损坏的正则表达式:您可以在任何地方使用emacs的全部功能,包括在多文件regexp-replacement中使用。并在文本片段中。 Aristotle Pagaltzis在一个较早的答案中写道:" Vim在小巧方面表现出色……您可以在正常的编辑过程中轻松地在Vim中执行操作,而这需要您使用Emacs编写脚本。" 在使用vi十多年后,我改用Emacs,最初我会同意这样的说法:"您可以在正常的编辑过程中轻松地在Vim中执行操作,这需要您使用Emacs中的脚本。"但是后来我发现,通过使用Emacs的宏功能和大量的重复计数,我可以轻松地使Emacs完成vi简化过的几乎所有工作,并且做得更多。 Emacs的宏功能涉及三个命令:
例如,在vi中,如果我想在HTML文件中找到所有
此示例并不完美,因为它假定所有 为了在emacs中轻松实现相同的效果,请执行以下操作:
这是上述每个击键的作用的描述:
它看起来很复杂,但是实际上很容易键入。而且,您可以使用这种方法来完成vi不能做的许多事情,而无需使用Lisp代码。 没有 我已经使用emacs多年了,我是VIM的转换者,并且我喜欢将其转换为bit。 但是,拥有一个更好的可编程编辑器所带来的任何生产力提高都将完全被emacs的束缚所淹没。它被设计为控制台编辑器,而界面的想法不是您的。 即使您完全掌握了它,您的额外生产力也将主要体现在您可以编写的额外emacs lisp中。 谁在乎?很好玩,猫是狗!如果您想"把事情做好",那就不用编程了。您可以随时雇用程序员来"做""事"。 出于生产力原因,我建议学习emacs的唯一情况是,如果您是lisp / scheme / clojure程序员。它提供了一个很好的Lisp环境,因此几秒钟的时间它可以节省您每次想做的事情的时间,从而迅速使您受益匪浅。如果您已经使用了真正的Lisp,则elisp(与lisp有关,而excel宏与ALGOL一样)将显得不那么陌生。 如果您尝试一下,请在虚拟控制台上使用它,这更像是安排编辑器的理智方式。只有在有意义的情况下,才尝试在可与之抗衡的窗口系统下使用它。
我真的没有理由切换。我已经使用vi很长时间了,对此我感到很舒服。大约每六个月,我会安装emacs来尝试一下,然后迅速切换回去。是的,关于vi我有一些我更喜欢的东西,但我从未坚持使用它的主要原因是因为在我已经知道一个非常有能力的编辑器时花时间完全学习另一个编辑器是不值得的。 我认为,如果您已经精通vi,SLIME就是切换到emacs的唯一原因。 |