代码之家  ›  专栏  ›  技术社区  ›  Andrew

值得花时间学习使用Emacs吗?

  •  56
  • Andrew  · 技术社区  · 17 年前

    就在前面:我知道

    我用过 六、 从我记事起,我几次试着拿起 Emacs 我迷路了,很快就放弃了。然而,很多人发现Emacs非常强大。它的可编程性有点传奇色彩。我主要从事Solaris+Java开发,我想问一个简单的问题:如果我花时间研究Emacs,我的生产率会提高吗?它提供的功能是否超过 在合理的时间内,生产率的提高会得到回报吗?

    重复:我不想要一个“我的编辑比你的好”的答案。我只是想要一个肯定或否定的答案,看看是否值得投入时间。我的生产力真的会提高吗?

    29 回复  |  直到 15 年前
        1
  •  43
  •   Aristotle Pagaltzis    17 年前

    [免责声明: 个人 ,我更喜欢维姆。免责声明免责声明:请继续阅读。]

    Vim擅长于小动作:通过将动作和动作分开,并为复杂的重复动作提供便利,您可以在短时间的按键序列中执行难以置信的强大编辑操作。在正常的编辑过程中,您可以轻松地在Vim中完成一些事情,这需要您在Emacs中编写脚本。此外,您使用的大部分电源都是从机箱中提供的,因此即使您拥有广泛的 .vimrc 任何 Vim安装。

    归根结底,两者都不优越。它们提供不同的风格,根据你的喜好,其中一种会更适合你的个人需求和思考方式。当然,了解这两者(加上更多的编辑)总是有帮助的。但这样那样的话,你的工作效率不会明显提高。

        2
  •  35
  •   Graeme Perrow    13 年前

    您可以在emacs中做一些事情,使其比vi更强大,但并非所有这些都与编程相关。(你可以发送电子邮件或阅读vi中的新闻吗?不,但谁在乎呢?)如果你对lisp感到满意(我不是),你也许可以编写附加组件、模式和其他东西,让你的生活更轻松,但这很可能是语法着色、括号匹配和类似的吸引眼球的东西。

    我现在就不闲逛了。你的 生产率 增加使用emacs?不

    :见下面我的评论。自从我贴了这个,我 遇到使用emacs比使用vi更高效的方法。

        3
  •  29
  •   jfs    15 年前

    vi是一把菜刀。

    vim是一把非常漂亮、锋利、平衡的厨师刀。

    Emacs是一把光剑。

    大多数时候,我的工作要求我切菜。有时候,我不得不面对一整支机器人大军。

    我已经使用Emacs 20年了。我现在正在用一个名为 "It's All Text" 这让我可以在Firefox的文本框中输入和输出文本。在Emacs中我能跑得很快。没有它,我的工作效率明显降低。

        4
  •  27
  •   shmuelp    17 年前

    根据您的编码方式,您可以 也许

    促使我真正学习emacs的是它的有用功能,它可以同时打开大量文件,并且可以轻松地在它们之间切换。我正在介绍一个添加和触摸大量类的特性。(这是C++,所以每个类通常有两个文件。)因为我仍然在增强接口,所以当我意识到我需要改变另一个文件时,我通常会在更新一个文件的中间。

    有了gvim,为每个文件打开一个新窗口是最容易的,这已经开始变得很麻烦了。但是,对于Emacs,在同一窗口(Ctrl-x、Ctrl-f)中打开新文件很简单。一旦Emacs打开了一个文件,就很容易在打开的缓冲区之间来回切换(Ctrl-x、Ctrl-b)。

    更进一步说,单个emacs会话可能会打开多个窗口,因此除了垂直拆分窗口外,我还可以在不中断文件工作的情况下,决定在其旁边打开另一个窗口,使我能够有效地并排工作,同时仍将每个窗口保持默认的80个字符宽度。

    我发现在vim中仍然有一些东西更容易(例如块选择模式、简单宏录制、差异模式),而在Emacs中则更容易(行对齐、文件/缓冲区管理、窗口/屏幕管理)。因此,根据我预期的编辑任务,我发现自己在两者之间交替(有时同时使用两者)。

    如果你还不确定,我建议你试试。运行Emacs教程,然后使用它为一个上午或一天编写代码,主要依靠帮助。如果你仍然不喜欢你所看到的,就和维姆呆在一起。无论编辑器为您带来了什么,您对该工具的熟悉程度和知识都将是影响您工作效率的最重要因素。

        5
  •  17
  •   Alana Storm    15 年前

    我不想要一场圣战,但请回答一个非常主观的问题,回答是/否。

    是的,由于功能强大,您可能会看到生产力的提高。

    不,您不会看到生产力的提高,因为emacs中使用的模式和隐喻可能与您的大脑不一致。

        6
  •  13
  •   MBR    14 年前

    对你的问题的简短回答是“是的”。更多细节见下文。

    从1980年到1991年,我几乎只使用vi。我唯一一次不使用vi是在处理一个最小的Unix安装时,它太小了,无法包含vi,所以我不得不回到ed,它是原始vi构建的编辑功能的最小子集。

    大约从1985年开始,我工作的其他程序员一直在赞美emacs。但每次我试着去学,我都走不了多远。我花了一个小时浏览emacs教程(C-HT),最后我所知道的就是如何插入和修改文本以及在屏幕上移动。我可以用vi做更多的事情,而不是在那一小时里用emacs学到的东西,以至于我无法切换。三个月后,我会抽出时间再花一个小时,最后我会读同样的材料。Emacs有一条大写字母“L”的学习曲线。直到我签订了一份其他人都使用emacs的合同,我才最终决定每次花一个多小时来学习emacs。在花了一天多一点的时间,除了完成教程和附带的文档外,我什么都不做,终于到了可以用emacs做vi做不到的事情的地步。从那时起,我再也不想回去了。我仍然可以在睡眠中键入vi命令,但我可以用emacs做更多的事情。

    请理解,我是在比较emacs和vi,而不是vim。我从未了解vim添加到vi中的扩展,很可能其中许多是从emacs复制的特性。如果是这样,并且您已经精通vim,emacs可能不会为您带来那么多优势。

    在emacs中,我一直依赖的东西包括:

    1. 使用emacs时,所有内容都被视为文本。这意味着您可以使用几乎相同的命令操作任何缓冲区中的任何数据。如果缓冲区处于某些标准命令不可用的模式,您可以将文本复制到另一个以基本模式运行的缓冲区,并在那里使用标准命令。

    2. Emacs提供了一个可在字符单元终端上显示的多窗口环境。在位图图形和真实窗口出现之前的日子里,emacs被编写成只使用ascii字符和光标定位来模拟类似窗口的行为。你可能会想,“这是古老的历史。为什么今天有人会关心它?”我仍然每天都在使用这个功能。我使用允许SSH访问的webhosting公司。因此,我可以通过Internet登录Linux主机并运行shell命令。虽然这非常强大,但它更强大的功能是能够使用emacs将我的终端模拟器划分为“窗口”,在几个“窗口”中运行shell,在其他窗口中编辑文件,以及在其他“窗口”中查看和编辑目录。

      实际上,当我在上一段中说“窗口”时,我的意思是“缓冲区”。Emacs对windows的字符单元模拟是划分屏幕空间的一种方法。emacs缓冲区与当前可能显示或不显示的内容(文件、bash shell、目录、与文件无关的任意文本等)关联。要查看缓冲区中的内容,您可以选择一个窗口并告诉它您要查看的缓冲区。因此,您可以处理比屏幕上显示的空间更多的事情。这大致类似于在现代位图图形GUI中对窗口进行图标化/反图标化时所做的操作。

    3. 我已经提到,您可以在emacs缓冲区内运行shell。可以让任意多的缓冲区运行shell。您可以在shell缓冲区和文本文件之间来回复制和粘贴文本,或者使用与复制文本或比较两个不同文本文件之间的文本完全相同的按键顺序来比较shell缓冲区和文本文件之间的部分文本。实际上,对于大多数类型的缓冲区都是如此,而不仅仅是shell缓冲区和与文件关联的缓冲区。

    4. 我经常使用的emacs函数之一是“比较窗口”。与命令行“diff”或GUI比较工具(如Eclipse内置的工具)相比,我更喜欢这种工具。Diff或Eclipse比较整个文件,并显示哪些行不同。但是当你有两条看起来非常相似的不同线条时会发生什么呢?考虑以下事项:

      这条线和另一条线有什么区别?

      这条线和另一条线有什么区别?

      你要花多长时间才能发现差异?(提示:ASCII和Unicode撇号看起来非常相似。)

      我经常使用“比较窗口”来比较校验和。许多软件项目在一个页面上分发应用程序的tarball,该页面还包含tarball的MD5散列。那么,如何将分发页面上的MD5哈希与从下载的文件计算的MD5哈希进行比较呢。Emacs使这变得微不足道。

      首先将MD5哈希从网页复制到新的emacs缓冲区中。然后,在下载.tar.gz文件后,运行:

      在shell缓冲区中。当这两个缓冲区并排显示在emacs窗口中时,将光标放在每个窗口的校验和开头,然后运行“比较窗口”。如果它们相同,则每个窗口中的光标将位于每个校验和的末尾。

    5. 在前一点中,我给出了在以下行上运行“比较窗口”的示例:

      这条线和另一条线有什么区别?

      这一行和另一行有什么区别?

      “比较窗口”将使光标位于每行的撇号上。所以,现在你知道哪些字符不同了。但是他们是什么角色呢?键入两个击键命令CTRL-x=,emacs将显示字符、其ascii值(八进制、十进制和十六进制)、字符距文件开头的偏移量以及字符距行首的偏移量。由于ASCII是7位编码,所有ASCII字符的高阶位都已关闭。一旦看到第一个撇号的值是0x27,第二个撇号的值是0x92,很明显第一个撇号在ASCII字符集中,而第二个撇号不在。

    6. Emacs允许您创建宏,方法是告诉它何时开始记住正在键入的内容以及何时停止。这对于您经常执行的任务来说非常强大。

    7. 如果您了解Lisp,Emacs是无限可扩展的。但即使我从未学习过Emacs Lisp,我仍然发现Emacs是我使用过的最强大的工具之一。

    8. Emacs密钥绑定。我将是第一个承认Emacs键绑定很糟糕的人。但它比我用过的任何其他东西都强大得多,所以我愿意忍受键绑定。

    9. 几年前,Emacs的作者Richard Stallman(也是GPL的创始人、GNU项目的创始人和FSF的创始人)幽默地讽刺了那些将vi与Emacs视为圣战的人。他发明了埃马科斯教会的“圣伊格纳修斯”这个角色。在这种伪装下,Stallman评论道,“有时候人们问我在Emacs教会使用另一个文本编辑器vi是否是一种罪恶。没错,vi是野兽的编辑器,但使用免费版本的vi不是罪恶,而是一种忏悔。” http://stallman.org/saint.html

        7
  •  12
  •   jjames    16 年前

    我使用Vim已经10年了,直到2年前才开始研究Emacs。我对我的生产率曲线是如何随着时间的推移而改变的有着相当新鲜的回忆。

    我的观点都是有条件的,取决于你的实力和经验。

    如果您使用Unix和命令行的时间足够长,并且熟悉C-a、C-e、C-n、C-p、C-k、C-y等在shell上的功能,那么在Emacs中过渡到使用这些相同的绑定(默认值)并不需要很长时间。我最近发现XCode也使用这些绑定。

    如果您通常在许多相关文件的项目中工作,那么这种持久性在维护该缓冲区的上下文方面会带来一些额外的好处。每个缓冲区都在其打开的文件中进行了上下文扩展,以便为您的项目方便地使用各种提高生产率的工具(如grepfind、eshell、runpython和slime)。再加上文本完成,yasnippets等开始看起来很像IDE,尽管它是临时的,并且根据您的配置进行了高度个性化。这与ECB等更文明的Emacs IDE服务不同。

    我的工作效率一开始就受到了影响,因为我在第一周左右的时间里不断地键入“jjkk”。接下来的一周,我小心翼翼地开始使用正确的导航键。然后我发现了配置文件。。。老实说,如果我有 Emacs Starter Kit 从一开始,我会说我的生产力在第3到第4周慢慢恢复到了平衡,但我确实进入了配置文件的兔子洞。不过,我的一位同事刚刚从vim过渡到emacs,他刚刚拿到了初学者工具包,正在路上。第一周,他看起来很舒服,享受着所有的惊喜(这种感觉可能会持续十年)。

    最后,如果你犯了错误,你将立即从循环杀/拽环和撤销环中获得生产力(和信心)。我个人也是一个特定地区的观察员的粉丝。

    我的简短回答是肯定的,值得花3-4周的时间来学习Emacs。即使您决定在开发中更喜欢精简的unix实用程序组合而不是Emacs,您也将从中获得一种广泛适用于编辑器之外的教育。

        8
  •  10
  •   Nick Retallack monkut    15 年前

    Emacs文档是一个森林。当我意识到Vim的文档是多么的有条理,许多特性是多么的易读时,我从Emacs来到了Vim。我不知道Emacs专家的出路是什么,但我要警告你,学习在这方面做任何有用的事情都需要很长时间,而且不会让你在nethack方面做得更好。坚持维姆。

    Textmate 是一个更好的用于Mac的Emacs,尽管这对Solaris没有帮助。Eclipse有点酷,有很多插件。

        9
  •  8
  •   Trey Jackson    17 年前

    这就是说,如果您正在开发Java,Eclipse是标准答案,因此您的问题相当没有意义。

        10
  •  7
  •   Peter Mortensen icecrime    15 年前

    我对我的Vim很满意,但有一次我听说了 org-mode ,我开始学习Emacs。

        11
  •  5
  •   gerikson    17 年前

    我喜欢emacs,每天都使用它。

    也就是说,我不认为学习it的成本会被未来的生产率提高所弥补。

        12
  •  4
  •   Andy Lester    17 年前

    我两次尝试学习Emacs。它不符合我的大脑工作方式,所以我不使用它。

    Emacs(或vim)并不明显优于vim(或Emacs)。两者都有许多可供选择的选项,可以让他们做出惊人的事情。我毫不怀疑,任何可以在Emacs中完成的事情都可以在Vim中完成,只是不是标准的。

    试试Emacs。看看是否更合适。这是一个不输的局面。

        13
  •  3
  •   Bernard    17 年前

    我想进一步研究emacs,但我就是不能长时间使用它;我的手受伤了。我做错什么了吗?

        14
  •  3
  •   Johan    16 年前

    vim和emacs是最有能力的编辑器,并且已经有相当一段时间了。 如果你真的很了解一个,我怀疑你会在这个过程中获得那么多。。。

    然而,研究一下从那时起可用的插件总是一个好主意

    /约翰

        15
  •  3
  •   Peter Mortensen icecrime    15 年前

        16
  •  2
  •   Andrei    17 年前

    沿着不寻求宗教战争的路线(但如果你觉得必须的话,请投我一票),为什么你觉得vi的唯一选择是emacs?是您开发的操作系统,还是您探索的选项?

    Java开发环境现在享受着一些最好的IDE(免费和付费),如果在代码编辑和重构支持方面不是最好的话。IntelliJ IDEA甚至有一个vi插件,可以帮助您感觉更自在,例如(不确定Eclipse是否有类似的东西可用)。虽然改变工具确实意味着一个学习曲线,但如果这个飞跃足够大的话,花在这上面的时间可能是值得的。

        17
  •  2
  •   dicroce    17 年前

        18
  •  2
  •   Jake Badlands    13 年前

    一般来说,emacs比vi更强大。您可以在emacs中做更多的事情。

        19
  •  1
  •   Jay Stramel    17 年前

    如果你决定花时间编写文本编辑器,你的工作效率将会提高。在这两个编辑器中,emacs提供了更好的框架或持续定制。如果您不编写文本编辑器,只需使用舒适的文本编辑器即可。

        20
  •  1
  •   Brian Carper    17 年前

    学习Emacs的一个很好的理由是其他程序也使用Emacs键绑定。例如,您可以在bash提示符下使用Emacs键绑定,或者使用GNU readline使用其他任何东西。学习Emacs中的基本乐章、单词/行删除和撤消/重做和弦是很好的,这样您就可以在其他程序中使用它们。即使您不再使用Emacs,您的生产力也会在这些其他工具中得到提高。

        21
  •  1
  •   dbr    16 年前

    在最初的几天/几周,绝对不是。

    当你不再每次想编辑某个内容时都要通读教程之后-当然。。

    Emacs 比vim更“强大”,它的脚本引擎更灵活,而且围绕emacs构建的脚本、模式和诸如此类的东西多得多。

    也就是说,事实恰恰相反。。如果你花同样多的时间来提高你对vim的认识,你也会同样富有成效。。

    也许没有同样的效率——我想说vim编辑文件更快,emacs更擅长做其他事情(同样,我个人会说 flymake-mode

        22
  •  1
  •   Peter Mortensen icecrime    15 年前

    我同意Alan Storm的观点:“因为Emacs中使用的模式和隐喻可能与你的大脑不一致。”

    这是一个非常重要的因素。不同的大脑适应不同的界面。

    我非常喜欢Emacs的一些主要功能,而且很容易获得,我认为这些功能可以提高生产率:

    2.Ctrl键导航映射-这允许您导航文件,而无需将手移开以使用箭头键。(其他编辑器中的键绑定当然有帮助)
    3.几乎在所有平台上都可用(当然也适用于vi/Vim)——无论是基于GUI还是基于文本的(Java IDE在大多数平台上也可用,但仅在GUI模式下可用,而且要大得多,需要单独安装,而Emacs通常更广泛地可用——BSD/*nix/Linux/Mac系统
    4.我更喜欢我的编辑在我需要它之前置身事外——Emacs斯巴达式的显示迫使我在打字前思考。
    5.Emacs中的基本导航键是普遍可用的——在我的Mac OS上,我可以在终端、Mac mail等中使用这些键。

        23
  •  1
  •   Peter Mortensen icecrime    15 年前

    由于vi/Vim和Emacs在它们能做什么或不能做什么方面非常接近,因此这两个编辑器的生产率来自于使用它的经验。

    在我看来,作为一名程序员,一旦你开始使用Emacs,你很快就会对它有一个大致的了解。其他人只能说这么多,你必须自己尝试去了解它。

    至于我,我两者都用。这就像在一场战争中使用不止一种武器,在适当的情况下使用适当的武器

        24
  •  1
  •   Hartmut Pfarr    14 年前

        25
  •  1
  •   quodlibetor    13 年前

    免责声明: 我无知。我已经使用emacs大约4年了,使用vim大约6个月了,如果你计算一下我尝试学习和讨厌它的所有次数,可能更像15次。(写作模式和移动模式的区别让我很难受。每一次。因此,如果它没有让你难受,那么我的观点可能毫无价值。)也就是说,我认为我的观点实际上与我在这里看到的其他26种观点有着有趣的不同,所以我要表达出来。 :圆盘机

    我的意见是:

    • Emacs更适合打字,尤其是大规模的“我正在编写一个新功能,我甚至还需要一段时间才能完成。” 看看它是否运行”。

    当我需要同时理解和破解8个文件时,Emacs作为具有多缓冲区的平铺窗口管理器的属性(缓冲区与文件的对应关系为1.2:1,它们通常是相同的,但不一定是相同的)regexp search(和replace)令人难以置信。

    如果我不喜欢一些小东西,因为 git diff 在shell中(我不经常使用emacs的VC功能,尽管我喜欢它们),我用vim打开它,然后以比我所能达到的更快的速度离开 Alt-TAB .

    Emacs的编辑命令在键入时更容易使用,这一事实使键入变得更加容易 比Vim中的速度快。 Ctrl+a 快于 ESC ^ i a i o O …“天哪,我讨厌去想这些。其他所有的动作指令也是如此。

    Org Mode (我在所有方面都使用它:待办事项列表、bug跟踪、注释、长电子邮件、文档……)在Emacs中比在Vim中更有意义(对我来说)。

    而且,Elisp令人难以置信,尽管它很差劲。它完全弥补了Emacs损坏的正则表达式:您可以使用Emacs的全部功能 ,包括在多文件regexp替换中。而且 text snippets .

        26
  •  1
  •   Jack Kinsella    13 年前

    如果你关心 祝你双手健康 选择Vim。

    我过去曾患过一次RSI,我发现其中一个主要原因是“和弦”,即同时按住多个键。Emacs广泛使用和弦,而VIM使用快速连续链接的单字母命令。在编辑器中执行命令时,由于肌肉不必扭曲和扭曲,因此手上的压力要小得多。RSI造成的伤害会破坏你的工作效率,所以在你的计算中一定要考虑到这一点。

        27
  •  0
  •   user20805    17 年前


    rather dated study.

    在我看来,如果你已经精通vi,SLIME大概是你切换到emacs的唯一原因。

        28
  •  0
  •   John Lawrence Aspden    13 年前

    我已经使用emacs很多年了,我是VIM的一个转换者,我喜欢它。

    即使您已经完全掌握了它,您额外的生产力也将主要用您可以编写的额外emacs lisp来表示。

    谁在乎呢?这很有趣,lisp就是狗!如果你想“把事情做完”,那就忘了编程吧。你总是可以雇佣程序员来“做”事情。

    出于生产力原因 如果您是lisp/scheme/clojure程序员。它提供了一个非常好的lisp环境,因此每次您想做任何事情时,它能节省您的几秒钟时间,这将很快为您带来真正的收益。如果您已经使用了真正的lisp,那么elisp(它与lisp的关系就像excel宏与ALGOL的关系一样)看起来就不那么陌生了。

    如果您确实尝试过,请在虚拟控制台上使用它,在那里它更像是一种安排编辑器的明智方式。只有当这有意义的时候,试着在一个窗口系统下使用它,这将与之斗争。

        29
  •  0
  •   MBR    13 年前

    在早些时候的回答中,亚里士多德·帕格尔茨写道:“Vim在小范围内表现出色……在正常的编辑过程中,您可以轻松地在Vim中完成一些事情,这需要您使用Emacs编写脚本。”

    在十年来一直使用vi之后,我转向了Emacs,最初我会同意这样的说法,“在正常的编辑过程中,你可以很容易地在Vim中做一些事情,这需要你在Emacs中编写脚本。”但后来我发现,通过使用Emacs的宏功能和大量重复次数,我可以很容易地让Emacs完成vi让它变得简单的几乎所有事情,还有更多。

    Emacs的宏功能包括三个命令:

    C-x (       start remembering keystrokes
    C-x )       stop remembering keystrokes
    C-x e       replay the remembered keystrokes
    

    例如,在vi中,如果我想找到所有 <a> HTML文件中的标记 target 属性,我可能会执行以下操作:

    :g/^<a/s/>/ target="_blank">/
    

    这个例子并不完美,因为它假设所有 <a> 标签本身在一条线上。但这足以说明一个人如何在两个不同的编辑器中完成相同的任务。

    为了在emacs中轻松实现相同的效果,我做了以下几点:

    1.  C-x (
    2.  M-C-s <a\>
    3.  C-b
    4.  C-s >
    5.  C-b
    6.   target="_blank"
    7.  C-x )
    8.  C-u 10000 C-x e
    

    1.  start remembering keystrokes
    2.  regex search for <a.  Note that the "\>" after the "a" is not HTML.  It's emacs regex notation for end-of-word.
    3.  back up one character - as a side-effect this gets you out of search mode
    4.  search for the next ">"
    5.  back up over the ">"
    6.  enter space as an attribute-delimiter followed by the target="_blank" attribute
    7.  stop remembering keystrokes
    8.  replay the remembered keystrokes 10,000 times or until the search fails
    

    它看起来很复杂,但实际上很容易打字。您可以使用这种方法来做很多vi无法做的事情,而不必使用Lisp代码。

    推荐文章