就在前面:我愿意 不是 想要发动宗教战争。

我用过 从我记事起,以及我尝试接起的几次 Emacs 我很失落,很快就放弃了。然而,很多人发现 Emacs 非常强大。它的可编程性有点传奇。我主要是做Solaris+Java开发,想问一个简单的问题:如果我花时间熟悉 Emacs,我的工作效率会提高吗?它提供的功能是否超过 维姆 会在合理的时间内通过生产率的提高得到回报吗?

重复:我不想要“我的编辑比你的更好”的答案。我只想知道是否值得投入时间。我的生产力真的会提高吗?

有帮助吗?

解决方案

与 vi 相比,我更喜欢 emacs,但我对两者都很满意。

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

我现在就停止胡言乱语了。你的 生产率 增加使用emacs?不。

更新: :请参阅下面我的评论。自从我发了这篇文章以来,我 发现使用 emacs 比使用 vi 提高了我的工作效率。

其他提示

[免责声明: 亲自, ,我更喜欢Vim。免责声明 免责声明:继续阅读。]

Vim 在小方面表现出色:通过使运动和动作成为独立的概念并为复杂的重复提供设施,您只需按几个简短的按键序列即可执行令人难以置信的强大编辑操作。在正常的编辑过程中,您可以在 Vim 中轻松执行需要您在 Emacs 中编写脚本的操作。此外,您使用的大部分电源都是开箱即用的,因此即使您有大量的电源 .vimrc 定制,您很可能能够高效地工作 任何 Vim 安装。

Emacs 在以下方面表现出色:通过将其所有 UI 概念直接映射到 Elisp 中的基本构造和概念,可以非常轻松地全局引入针对特定类型文件或环境的功能,使 Emacs 类似于基于文本且更具结构化可编程形式的 Excel。这假设您将花费大量时间根据个人需求和偏好定制环境。当然,Emacs 确实尽力让您可以轻松地在一个环境中完成您可能想做的所有事情。

最终,两者都不优越。它们提供不同的风格,根据您的喜好,其中一种会更适合您的个人需求和思维方式。当然,了解两者(以及更多编辑)总是有帮助的。但这种或那种方式并不会让你的工作效率明显提高。

vi 是一把菜刀。

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

Emacs 是一把光剑。

大多数时候,我的工作需要我切蔬菜。有时,我必须对抗一整支机器人军队。

我使用 Emacs 已有 20 年了。我现在正在 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 中一直依赖的东西包括:

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

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

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

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

  4. 当你使用 emacs 的命令打开一个文件,但你选择的实际上是一个目录时,缓冲区以 dired(目录编辑器)模式运行。在此模式下,单击一次按键即可打开光标当前指向的任何内容,无论是文件还是子目录。Dired 模式下的缓冲区是一个文件管理器 - 面向字符单元终端的类似于 Mac 或 Windows 资源管理器上的 Finder。

  5. 我几乎经常使用的 emacs 功能之一是“compare-windows”。与 Eclipse 内置的命令行“diff”或 GUI 比较工具相比,我更喜欢它。Diff 或 Eclipse 会比较整个文件,并显示哪些行不同。但是,当两条不同的线看起来非常相似时会发生什么?考虑以下:

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

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

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

    与 diff 和 Eclipse 不同,它们只是显示不同的行,emacs 的“compare-windows”功能是交互式的。将光标放置在两个并排窗口中每个窗口内容相同的位置。运行“compare-windows”,每个窗口中的光标将移动到第一个不同的字符。将其中一个窗口中的光标重新定位到与另一个窗口相同的位置,然后重新运行“compare-windows”以查找下一个差异。这使得比较文件的子部分变得容易。

    我经常使用“compare-windows”的另一件事是比较校验和。许多软件项目在页面上分发应用程序的 tarball,其中还包含 tarball 的 MD5 哈希值。那么,如何将分发页面上的 MD5 哈希值与从下载文件计算出的 MD5 哈希值进行比较。Emacs 让这一切变得微不足道。

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

    md5sum 下载文件.tar.gz

    在外壳缓冲区中。当这两个缓冲区显示在并排的 emacs 窗口中时,将光标定位在每个窗口中校验和的开头并运行“compare-windows”。如果它们相同,则每个窗口中的光标将位于每个校验和的末尾。

  6. 在上一点中,我给出了运行“compare-windows”的示例:

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

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

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

  7. Emacs 是最早的 IDE 之一,也许是第一个。它具有针对特定语言的模式。我发现它们可以很方便地在我的代码上施加一致的缩进,以使其更具可读性。还有用于编译和调试代码的内置功能。我不太使用编译功能,因为当我为 C 等编译语言编写代码时,我习惯在 shell 提示符下执行此操作。对于 C 和 C++ 来说,调试功能非常好。它将 gdb 与编辑器集成在一起,您可以获得与 Eclipse 中现在的调试功能几乎相同的功能,但不会像现代基于 GUI 的 IDE 那样浪费屏幕空间。理论上,调试器集成应该很容易使其适用于几乎任何其他语言,但我还没有检查它现在可以使用哪些其他语言。

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

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

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

  11. 几年前,Emacs 的作者 Richard Stallman(也是 GPL 的创始人、GNU 项目的创始人和 FSF 的创始人)以一种幽默的方式讽刺了那些对待 vi 与 vi 的人。emacs 是一场圣战。他发明了 Emacs 教会的角色“Saint IGNUcius”。Stallman 以此为幌子评论道:“有时人们会问我,在 Emacs 教会中使用其他文本编辑器 vi 是否是一种罪过。嗯,vi vi vi 确实是野兽编辑器,但是使用免费版本的 vi 并不是罪过,而是一种忏悔。”(参见 http://stallman.org/saint.html. 。还有一张他的可爱照片,但由于我是 StackOverflow 的新手,它不允许我发布多个 URL。因此,请转到同一域,但获取文件 saintignucius.jpg)

我使用 Vim 已经有 10 年了,直到 2 年前才开始深入研究 Emacs。对于我的生产力曲线如何随着时间的推移而变化,我有着相当清晰的记忆。

我的观点都是有条件的,YMMV取决于你的优势和经验。

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

如果您对始终运行的编辑器感到满意,管理缓冲区(就像您对浏览器选项卡一样)并因此生活在应用程序中(就像您在浏览器中使用 Web2.0 应用程序一样),那么 Emacs 可能会立即显示出生产力的提高。

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

我的工作效率最初受到了影响,因为我在第一周左右不断地输入“jjjkkk”Esc-Esc-Esc-Esc。接下来的一周,我开始小心翼翼地使用正确的导航键。然后我发现了配置文件......老实说,如果我有的话 Emacs 入门套件 从一开始,我就会说我的生产力在第三到第四周慢慢恢复到同等水平,但我确实陷入了配置文件的兔子洞。不过,我的一位同事刚刚从 vim 过渡到 emacs,他刚刚拿到了入门工具包,并且正在上路。第一周,他看起来很舒服,并享受着所有令人惊讶的好处(这种感觉可能会持续十年)。

最后,如果您犯了错误,您将立即从循环终止/猛拉环和撤消环中获得生产力(和信心)。我个人也很喜欢特定区域的撤销。

我的简短回答是,是的,花 3-4 周的时间来学习 Emacs 是值得的,这对生产力的影响正在逐渐减少。即使您决定更喜欢使用简化的 UNIX 实用程序组合而不是 Emacs 进行开发,您也将从中获得广泛适用于编辑器之外的教育。

Emacs 文档是一座森林。当我意识到 Vim 的文档是多么有组织性,以及许多功能是多么令人共鸣时,我从 Emacs 转向了 Vim。我不知道 Emacs 专家的道路是什么,但我会警告你,学习做任何有用的事情都需要很长时间,并且不会让你在 nethack 方面变得更好。坚持使用 Vim。

文本伙伴 是适用于 Mac 的更好的 Emacs,尽管它对 Solaris 没有帮助。Eclipse 很酷,并且有很多插件。

如果您愿意学习并自定义 Emacs 以满足您的需求,Emacs 将提高工作效率。大多数人都不是。为了提高您的工作效率,您必须使用该工具进行不仅仅是简单的编辑 - 大多数人永远不会超越简单的编辑。

这是一个快速测试:您是否自定义了窗口管理器以使您的环境更加高效(根据您的需求量身定制)?如果“否”,那么您可能不会通过学习 emacs 获得投资回报。

话虽这么说,如果您正在开发 Java,Eclipse 是标准答案,所以您的问题毫无意义。

我对我的 Vim 非常满意,但是一旦我听说 组织模式, ,我开始学习Emacs。org-mode 可能是学习 Emacs 的重要原因之一。

我喜欢 emacs 并且每天都使用它。

也就是说,我不认为学习它的成本可以通过未来生产力的提高来弥补。

如果您正在编写 Java 程序,那么您需要一个好的 IDE。Emacs 朝着成为一体的目标迈出了一大步,但让我们面对现实吧,IDEA 等人轻而易举地击败了它。(emacs 可能启发了很多这样的 IDE,但那是另一个故事了)。

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

Emacs(或 vim)并不比 vim(或 Emacs)好太多。两者都有很多选项可供添加,使他们能够做出令人惊奇的事情。我毫不怀疑,任何你能在 Emacs 中完成的事情,你也可以在 Vim 中完成,只是不标准。

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

我想进一步研究 emacs,但我就是不能长时间使用它;我的手很痛。我做错了什么可怕的事情吗?

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

但是,研究可用的插件总是一个好主意,因为一些新插件可以为生产力带来奇迹。

/约翰

不(而且我都用过)。

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

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

你打字的速度有多快?如果您喜欢狩猎和啄食,那么 emacs 不适合您。如果你的速度很快,那么就不必一直抓着鼠标了。

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

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

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

我了解 Vim 和 Emacs,Vim 更适合我的大脑和习惯。但其他人对 Emacs 也有同样的看法。除非你尝试,否则你永远不会知道自己的情况。不需要花很长时间就能把 Emacs 学好,看看你是否会喜欢它。

我的生产力真的会提高吗?

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

当您不再需要每次想要编辑某些内容时都阅读教程之后 - 当然..

Emacs 比 vim 更“强大”,它的脚本引擎更加灵活,并且围绕 emacs 构建了更多的脚本、模式等。

也就是说,事实恰恰相反..如果你花同样多的时间来提高你的 vim 知识,你的工作效率也会一样高。

也许不会以同样的方式高效 - 我想说 vim 编辑文件更快,emacs 更擅长做其他事情(同样,我个人会说这样的事情 flymake-mode, ,VCS 绑定比 vim 等价物使用起来更快)

我同意艾伦·斯托姆的观点:“因为 Emacs 中使用的模式和隐喻可能与你的大脑不一致”

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

我非常喜欢 Emacs 的一些主要且易于使用的功能,我将其视为生产力增强器:
1.“yank-pop”工具 - 每个剪切/复制都会保存到堆栈中,以便您以后可以选择要粘贴的内容(不知道 vi / Vim 是否有此功能,但大多数 Java IDE 没有)
2.Ctrl 键导航映射 - 这使您无需移开双手即可使用箭头键来导航文件。(其他编辑器中的键绑定当然有帮助)
3.几乎在所有平台上都可用(当然 vi/Vim 也是如此) - 无论是基于 GUI 还是基于文本(Java IDE 也可在大多数平台上使用,但仅在 GUI 模式下可用,并且体积大得多,需要单独安装,而 Emacs通常更广泛可用 - BSD / *nix / Linux / Mac 系统
4.我更喜欢我的编辑器在我需要之前不要打扰我——Emacs 简洁的显示迫使我在打字之前思考。
5.Emacs 中的基本导航键是普遍可用的 - 在我的 Mac OS 上,我可以在终端、Mac 邮件等中使用这些键。

最终,如果 Emacs 的理念吸引您,您就会付出额外的努力来学习它。它会奖励你。

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

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

至于我,我两者都用。这就像在战争中携带多种武器一样,在正确的情况下使用正确的武器。;)

我喜欢Emacs,你可以根据你的需要来扩展它——在我看来,任何你能自己扩展的系统都是值得奖励的。

免责声明: 我无知。我使用 emacs 大约 4 年,使用 vim 大约 6 个月,如果算上我尝试学习但又讨厌它的次数,可能就 15 个月了。(写作与移动模式的区别让我很恼火。每次。因此,如果它不能杀死你,那么我的观点可能完全毫无价值。)也就是说,我认为我的观点实际上与我在这里看到的其他 26 个人的观点有趣地不同,所以我要表达它。:免责声明

我的想法:

  • Emacs 更适合打字,尤其是大型打字“我正在编写一个新功能,需要一段时间才能完成 尝试 看看它是否运行”。
  • Vim 更适合编辑,尤其是快速编辑。

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

如果我因为一些小事而不喜欢 git diff 在 shell 中(我不经常使用 emacs 的 VC 功能,尽管当我使用它们时我很喜欢它们)我用 vim 打开它,并且比我能打的更快 Alt-TAB.

事实上,Emacs 的编辑命令在打字时更容易使用,这使得打字变得容易 很多 比 Vim 中的速度更快。 Ctrl+a很多 比...快 ESC ^ i, ,并且你没有“我想要吗? a 或者 i 或者 o 或者 O……”上帝啊,我讨厌这样想。对于所有其他移动命令也是如此。

我在 Emacs 中打字速度越来越快。这意味着像这样的事情 组织模式 (我用它来做所有事情:TODO 列表、错误跟踪、注释、长电子邮件、文档...)在 Emacs 中比在 Vim 中更有意义(对我来说)。

而且,Elisp 令人难以置信,尽管它很糟糕。它完全弥补了 Emacs 损坏的正则表达式:您可以使用 emacs 的全部功能 到处, ,包括在多文件正则表达式替换中。并且在 文本片段.

如果您担心 你双手的健康 选择 Vim。

我过去曾遭受过 RSI 的困扰,我发现罪魁祸首之一是“和弦”,即同时按住多个键。Emacs 广泛使用和弦,而 VIM 使用快速连续链接的单字母命令。这会给您的手带来更少的压力,因为肌肉不必扭曲和扭曲即可在编辑器中执行命令。RSI 造成的伤害可能会破坏您的工作效率,因此在计算时请务必考虑到这一点。

我实在看不出有什么理由要换。我已经使用 vi 很长时间了,并且用起来很舒服;大约每六个月我就会安装 emacs 来尝试一下,然后很快就切换回来。是的,我非常喜欢 vi 的一些东西,但我从未坚持使用它的主要原因是,当我已经知道一个非常有能力的编辑器时,投入时间来完全学习另一个编辑器是不值得的。
我想起了这个 相当过时的研究。

在我看来,如果您已经精通 vi,那么 SL​​IME 可能是切换到 emacs 的唯一原因。

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

但是,拥有一个更好的可编程编辑器所带来的任何生产力提升都将因掌握 emacs 的窍门而需要花费大量的精力而完全消失。它被设计为控制台编辑器,其界面的想法不是你的。

即使您完全掌握了它,您额外的生产力也将主要体现在您可以编写额外的 emacs lisp 中。

谁在乎?太有趣了,口齿不清就是狗!如果你想“把事情做好”,那就忘掉编程吧。你总是可以雇佣程序员来“做”“事情”。

我推荐学习 emacs 的唯一情况 出于生产力原因 如果您是 lisp/scheme/clojure 程序员。它创造了一个非常好的 lisp 环境,每次你想做任何事情时,它都会为你节省几秒钟的时间,很快就会累积成真正的收获。如果你已经使用过真正的 lisp,那么 elisp(它与 lisp 的关系就像 excel 宏与 ALGOL 的关系一样)看起来就不那么陌生了。

如果您确实尝试一下,请在虚拟控制台上使用它,感觉更像是安排编辑器的合理方式。只有当有意义时才尝试在窗口系统下使用它,窗口系统会与之对抗。

在之前的回答中,亚里士多德·帕加尔齐斯 (Aristotle Pagaltzis) 写道:“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 代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top