就在前面:我不想发动一场宗教战争。
从我记事起,我就一直在使用vi,而且有几次我试图拿起Emacs,我迷失了方向,很快就放弃了。然而,很多人发现 Emacs 非常强大。它的可编程性有点传奇。我主要从事 Solaris+Java 开发,我想问一个简单的问题:如果我花时间了解 Emacs,我的工作效率会提高吗?它比Vim提供的功能是否会在合理的时间范围内以提高生产力得到回报?
重复:我不想要一个“我的编辑比你的更好”的答案。我只想回答是否值得投入时间。我的生产力真的会提高吗?
就在前面:我不想发动一场宗教战争。
从我记事起,我就一直在使用vi,而且有几次我试图拿起Emacs,我迷失了方向,很快就放弃了。然而,很多人发现 Emacs 非常强大。它的可编程性有点传奇。我主要从事 Solaris+Java 开发,我想问一个简单的问题:如果我花时间了解 Emacs,我的工作效率会提高吗?它比Vim提供的功能是否会在合理的时间范围内以提高生产力得到回报?
重复:我不想要一个“我的编辑比你的更好”的答案。我只想回答是否值得投入时间。我的生产力真的会提高吗?
[免责声明:就个人而言,我更喜欢 Vim。免责声明:请继续阅读。]
Vim 在小方面表现出色:通过将动作和动作分开的概念并提供复杂重复的工具,您可以在短短的击键序列中执行令人难以置信的强大编辑操作。在正常的编辑过程中,您可以轻松地在 Vim 中完成需要您在 Emacs 中编写脚本的操作。此外,您使用的大部分功能都是开箱即用的,因此即使您进行了广泛的.vimrc
自定义,您也可以使用任何Vim 安装高效地工作。
Emacs 的优势在于:通过将其所有 UI 概念直接映射到 Elisp 中的基本结构和概念,可以很容易地为特定类型的文件或环境全局引入功能,使 Emacs 类似于基于文本的且更具结构化Excel的可编程形式。这假定您将花费大量时间来定制您的环境以满足个人需求和偏好。当然,Emacs 确实尽最大努力让您可以轻松地呆在一个环境中,以完成您可能想做的一切和任何事情。
最终,两者都不是优越的。它们提供不同的风格,根据您的喜好,其中一种会更适合您的个人需求和思维方式。当然,了解两者(加上更多的编辑)总是有帮助的。但是你不会以这种或那种方式显着提高生产力。
我更喜欢 emacs 而不是 vi,但我对两者都很满意。
您可以在 emacs 中做一些事情,使其比 vi 更强大,但并非所有这些事情都与编程相关。(你可以在 vi 中发送电子邮件或阅读新闻吗?不,但谁在乎呢?)如果你对 lisp 感到满意(我不喜欢),你也许可以编写附加组件、模式和其他东西来充实你的生活更容易,但这很可能是语法着色和大括号匹配以及像这样的眼睛糖果。
我现在不再胡说八道了。使用 emacs会提高您的工作效率吗?不。
更新:见下面我的评论。自从我发布这篇文章以来,我发现使用 emacs 比使用 vi 更有效率。
vi 是一把菜刀。
vim 是一把非常好的、锋利、平衡的厨师刀。
Emacs 是一把轻剑。
大多数时候,我的工作需要我切菜。有时,我必须与整个机器人大军作战。
我已经使用 Emacs 20 年了。我现在在 Emacs 中输入一个名为“It's All Text”的小部件,它可以让我在 Firefox 的文本框中输入和输出文本。我可以在 Emacs 中跑得非常快。没有它,我的工作效率会大大降低。
这是非常有争议的,但我也认为学习 Emacs 可以教给你很多关于编程的知识。
根据您的编码方式,您可能会看到生产力的提高。作为背景,我也是 vim 的长期用户,但我大约 2 年前学习了 emacs,现在可以互换使用它们。
促使我真正学习 emacs 的原因是它能够同时打开大量文件并在它们之间轻松切换。我正在介绍一个添加并触及大量类的功能。(这是 C++,所以每个类通常有两个文件。)由于我仍在巩固接口,当我意识到我需要更改另一个文件时,我通常会更新一个文件。
使用 gvim,为每个文件打开一个新窗口是最容易的,这开始变得笨拙。但是,使用 Emacs,在同一个窗口中打开一个新文件很简单(Ctrl-x、Ctrl-f)。一旦 Emacs 打开了一个文件,就很容易在打开的缓冲区(Ctrl-x、Ctrl-b)之间来回切换。
更进一步,一个 emacs 会话可能会打开许多窗口,因此除了垂直拆分窗口外,我还可以决定在不中断文件工作的情况下打开另一个文件,让我有效地并排工作-边,同时仍将每个窗口保持在默认的 80 个字符宽度。
还有一些我觉得在 vim 中更容易的东西(例如块选择模式、简单的宏录制、diff 模式),以及在 Emacs 中更容易的东西(行对齐、文件/缓冲区管理、窗口/屏幕管理)。因此,我发现自己在两者之间交替使用(有时同时使用两者),这取决于我预期的编辑任务。
如果您仍然不确定,我建议您尝试一下。通读 Emacs 教程,然后用它编写一个上午或一天的代码,严重依赖帮助。如果您仍然不喜欢您所看到的,请继续使用 vim。无论编辑器带来什么,您对该工具的熟悉程度和知识将成为您生产力的最重要因素。
我不想要一场圣战,但请用是/否回答一个高度主观的问题。
是的,由于强大的功能,您可能会看到生产力的提高。
不,您不会看到生产力提高,因为 emacs 中使用的模式和隐喻可能与您的大脑不一致。
您的问题的简短回答是“是”。下面更详细。
从大约 1980 年到 1991 年,我几乎只使用 vi。我唯一一次不使用 vi 是在我处理最小化的 Unix 安装时,它太小而无法包含 vi,所以我不得不退回到 ed,这是原始 vi 构建在其之上的编辑功能的最小子集。
大约从 1985 年开始,我工作的其他程序员一直在歌颂 emacs。但是每次我尝试学习它时,我都不会走得太远。我会花一个小时浏览 emacs turorial (Ch 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(目录编辑器)模式运行。在这种模式下,单次击键将打开光标当前指向的任何内容,无论是文件还是子目录。dired 模式下的缓冲区是一个文件管理器 - 一个面向字符单元终端,类似于 Mac 或 Windows 资源管理器上的 Finder。
我几乎经常使用的 emacs 功能之一是“比较窗口”。我非常喜欢它而不是命令行“差异”或 GUI 比较工具,如 Eclipse 内置的工具。Diff 或 Eclipse 比较整个文件,并显示哪些行不同。但是当你有两条看起来非常相似的不同线条时会发生什么?考虑以下:
这条线和另一条线有什么区别?
这条线和另一条线有什么区别?
您需要多长时间才能发现差异?(提示:ASCII 和 Unicode 撇号看起来非常相似。)
与只显示不同行的 diff 和 Eclipse 不同,emacs 的“比较窗口”功能是交互式的。您将光标定位在两个并排窗口中的每个窗口内容相同的位置。运行“compare-windows”,每个窗口中的光标会移动到第一个不同的字符上。将其中一个窗口中的光标重新定位到与另一个窗口相同的位置,然后重新运行“compare-windows”以查找下一个差异。这使得比较文件的子部分变得容易。
我经常使用“比较窗口”的另一件事是比较校验和。许多软件项目在页面上分发应用程序的 tarball,该页面还包括 tarball 的 MD5 哈希。那么,如何将分发页面上的 MD5 哈希与从下载文件计算的 MD5 哈希进行比较。Emacs 使这变得微不足道。
首先将网页中的 MD5 哈希复制到新的 emacs 缓冲区中。然后,下载 .tar.gz 文件后,运行:
md5sum 下载文件.tar.gz
在外壳缓冲区中。将这两个缓冲区显示在并排的 emacs 窗口中,将光标放在每个窗口中校验和的开头并运行“compare-windows”。如果它们相同,则每个窗口中的光标将位于每个校验和的末尾。
在上一点中,我给出了在行上运行“compare-windows”的示例:
这条线和另一条线有什么区别?
这条线和另一条线有什么区别?
“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 视为圣战的人。他发明了 Emacs 教堂的字符“Saint IGNUcius”。以此为幌子,Stallman 评论道,“有时人们问我在 Emacs 教会中使用其他文本编辑器 vi 是否是一种罪过。好吧,vi vi vi 确实是野兽的编辑器,但使用的是免费版本vi 不是罪,而是忏悔。” (见http://stallman.org/saint.html。还有一张他的可爱照片,但由于我是 StackOverflow 的新手,它不会让我发布多个 URL。所以去同一个域,但获取文件 saintignucius.jpg)
在 2 年前钻研 Emacs 之前,我使用了 10 年的 Vim。我对我的生产力曲线如何随着时间的推移而变化有相当新鲜的回忆。
我的观点都是有条件的,YMMV取决于你的优势和经验。
如果您使用 Unix 和命令行的时间足够长,并且熟悉 Ca、Ce、Cn、Cp、Ck、Cy 等,因为它们在 shell 上运行,那么过渡到使用这些相同的绑定不会花费很长时间(默认值)在 Emacs 中。我最近发现 XCode 也使用这些绑定。
如果您对始终运行的编辑器、管理缓冲区(就像浏览器选项卡一样)并因此生活在应用程序中(就像您在浏览器中使用 Web2.0 应用程序一样)感到满意,那么 Emacs 可能会立即显示出生产力的提高。
如果您通常在许多相关文件的项目中工作,那么这种持久性在维护该缓冲区的上下文方面会带来一些额外的好处。每个缓冲区在其打开的文件中都有上下文,允许为您的项目方便地使用各种提高生产力的工具(如 grep-find、eshell、run-python 和 slime)。这与文本完成、yasnippets 等相结合,开始看起来像 IDE 的一小部分,尽管它是临时的并且由您的配置高度个性化。这与 ECB 等更文明的类似 Emacs IDE 的服务不同。
我的工作效率最初受到了打击,因为我在第一周左右不断地输入“jjjkkk”Esc-Esc-Esc-Esc。接下来的一周,我谨慎地开始使用正确的导航键。然后我发现了配置文件......老实说,如果我从一开始就有Emacs Starter Kit,我会说我的工作效率在第 3-4 周慢慢恢复到平价,但我确实进入了配置文件的兔子洞。不过,我的一位同事刚刚从 vim 过渡到 emacs,他刚刚拿起了 Starter Kit,他正在路上。第一周,他看起来很舒服,享受着所有的惊喜(这种感觉可能会持续十年)。
最后,如果您犯了错误,您将立即从循环杀戮/拉环和撤消环中获得生产力(和信心)。我个人也是区域特定撤消的粉丝。
我的简短回答是,是的,学习 Emacs 值得花 3-4 周的时间来降低生产力。即使您决定更喜欢简化的 unix 实用程序组合而不是 Emacs 进行开发,您也会从中获得广泛适用于编辑器之外的教育。
Emacs 文档是一片森林。当我意识到 Vim 的文档是多么有条理,以及许多特性是多么和谐时,我从 Emacs 来到 Vim。我不知道 Emacs 专家的道路上有什么,但我会警告你,学习在其中做任何有用的事情需要很长时间,并且不会让你在 nethack 方面做得更好。坚持使用 Vim。
Textmate是适用于 Mac 的更好的 Emacs,尽管这对您使用 Solaris 没有帮助。Eclipse 有点酷,并且有很多插件。
如果您愿意学习并自定义 Emacs 以适应您的需求,那么 Emacs 将提供生产力提升。大多数人不是。为了提高您的工作效率,您必须使用该工具来进行简单的编辑——大多数人永远不会超越简单的编辑。
这是一个快速测试:您是否自定义了窗口管理器以使您的环境更高效(根据您的需要量身定制)?如果“否”,那么您可能不会通过学习 emacs 获得 ROI。
话虽这么说,如果您正在开发 Java,Eclipse 是标准答案,所以您的问题没有实际意义。
我对我的 Vim 非常满意,但是一旦我听说org-mode,我就开始学习 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 并看你是否会喜欢它并不需要那么长的时间。
由于 vi/Vim 和 Emacs 在能做什么或不能做什么方面非常接近,因此这两个编辑器的生产力来自于使用它的经验。
在我看来,作为一名程序员,一旦您开始使用 Emacs,您很快就会了解 Emacs 的总体概念。别人只能说这么多,你自己去试试就知道了。
至于我,我两个都用。这就像在战争中携带不止一种武器,在正确的情况下使用正确的武器。;)
我的生产力真的会提高吗?
在最初的几天/几周内,绝对不会。
在您不必每次要编辑某些内容时都阅读教程之后 - 确定..
Emacs比vim 更“强大”,它的脚本引擎更加灵活,并且围绕 emacs 构建的脚本、模式等要多得多。
也就是说,事实恰恰相反。如果你花同样多的时间来提高你对 vim 的知识,你可能会同样富有成效。
也许以同样的方式效率不高 - 我会说 vim 编辑文件更快,emacs 更擅长做其他所有事情(再次,我个人会说flymake-mode
,VCS 绑定比 vim 等价物使用起来更快)
我同意 Alan Storm 的观点:“因为 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 的哲学对您有吸引力,您将付出额外的努力来学习它。它会奖励你。
我喜欢 Emacs,你可以根据自己的需要扩展它——在我看来,任何你可以自己扩展的系统都是值得奖励的。
如果您担心双手的健康,请选择 Vim。
我过去曾经历过一次 RSI,我发现其中一个主要罪魁祸首是“和弦”,即同时按住多个键。Emacs 广泛使用和弦,而 VIM 使用快速连续链接的单字母命令。这对您的手造成的压力要小得多,因为肌肉不必扭曲和扭曲即可在编辑器中执行命令。RSI 造成的伤害会破坏您的工作效率,因此在您的计算中务必考虑到这一点。
免责声明:我是无知的。我成为 emacs 用户大约 4 年,vim 用户大约 6 个月,如果你算上我尝试学习它并且讨厌它的所有时间,可能更像是 15 个月。(写作与移动模式的区别让我死了。每次。所以如果它没有杀了你,那么我的意见可能完全没有价值。)也就是说,我认为我的意见实际上与我见过的其他 26 人不同在这里,所以我要发声。 :免责声明
我的意见:
当我需要同时理解和破解 8 个文件时,Emacs 的属性作为具有多缓冲区的平铺窗口管理器(缓冲区与文件有 1.2:1 的对应关系,它们通常是同一件事,但不一定)正则表达式-搜索(和替换)是不可思议的。
如果我不喜欢git diff
shell 中的一些小东西(我不经常使用 emacs 的 VC 功能,尽管当我喜欢它们时)我用 vim 打开它并且比我能打的更快Alt-TAB
.
Emacs 的编辑命令在打字时更容易使用,这一事实使得打字速度比在 Vim 中快得多。Ctrl+a
比快得多,ESC ^ i
而且你没有“我想要a
还是i
或o
或O
……”的认知负担,上帝,我讨厌这样想。对于所有其他移动命令命令也是如此。
我在 Emacs 中打字更快,更快。这意味着在 Emacs 中(我)比在 Vim 中更有意义(对我而言)像Org 模式(我用于所有事情:TODO 列表、错误跟踪、注释、长电子邮件、文档......)之类的东西。
而且,Elisp 令人难以置信,尽管它很烂。它完全弥补了 Emacs 损坏的正则表达式:您可以在任何地方使用 emacs 的全部功能,包括在多文件正则表达式替换中。在文本片段中。
我真的认为没有理由切换。我已经使用 vi 很长时间了,并且对它很满意;大约每六个月我会安装 emacs 来试一试,然后很快就切换回来。是的,我更喜欢 vi 的一些东西,但我从未坚持使用它的主要原因是,当我已经知道一个非常有能力的编辑器时,完全学习另一个编辑器的时间投入是不值得的。
我想起了这个相当过时的研究。
在我看来,如果您已经精通 vi,那么 SLIME 是切换到 emacs 的唯一理由。
不
我已经使用 emacs 多年了,我是 VIM 的转换者,我非常喜欢它。
但是,拥有更好的可编程编辑器所带来的任何生产力提升都将完全被掌握 emacs 所需的大量头疼所抵消。它被设计成一个控制台编辑器,它的界面理念不是你的。
即使你已经完全掌握了它,你额外的生产力也主要体现在你可以编写的额外的 emacs lisp 中。
谁在乎?这很有趣,而且 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 代码。