学习使用Emacs是否值得投入时间?

就在前面:我不想发起宗教战争。

只要我记得,我已经使用了vi ,而且我曾经尝试过拾起Emacs的那几次,我已经迷失了,所以很快就放弃了。 很多人发现Emacs非常强大,但是。 它的可编程性有点传奇。 我主要在做Solaris + Java开发,我想问一个简单的问题:如果我花时间在Emacs的脑海里投入时间,我的生产力会不会提高? Vim提供的function是否会在合理的时间内提高生产率?

重复一遍:我不想要一个“我的编辑比你更好”的答案。 对于是否值得投资的时间,我只是想一个是或否的答案。 我的生产力真的会增加吗?

我更喜欢vi的emacs,但我都很舒服。

在emacs中可以做一些比vi更强大的function,但并不是所有的function都与编程相关。 (你可以发送电子邮件或从vi内部阅读新闻吗?不,但是谁在乎?)如果你对lisp(我没有)感到满意,你可以编写附加组件和模式以使你的生活更容易,但这可能是语法着色和支持匹配和像这样的眼睛糖果。

我现在不再乱了。 你的生产力会增加使用emacs? 没有。

更新 :请参阅下面的评论。 自从我发布这个,我碰到过使用emacs使我比使用vi更有效率的方法。

[免责声明:我个人更喜欢Vim。 免责声明:阅读。]

Vim擅长于:通过使动作和动作分离的概念和为复杂的重复提供设施,您可以在短短的按键序列中执行难以置信的强大编辑操作。 在正常编辑过程中,您可以轻松地在Vim中执行这些操作,这需要您在Emacs中下载脚本。 而且,你使用的大部分function都是开箱即用的,所以即使你拥有大量的.vimrc自定义,你也可以在任何 Vim安装下高效地工作。

Emacs的优势在于:通过将其所有UI概念直接映射到Elisp中的基本构造和概念,在特定types的文件或环境中全局引入function变得非常容易,使得Emacs像基于文本的结构化Excel的可编程forms。 这假设你将花费大量的时间来定制你的个人需求和喜好的环境。 当然,Emacs会尽其所能,让所有事情和任何您想要做的事情都容易保持在一个环境中。

最终,两者都不是优越的。 他们提供不同的风格,并根据您的倾向,其中一个或另一个将满足您的个人需求和更好的思维方式。 当然,了解这两者(加上更多的编辑)总是有帮助的。 但是这样或者那样,你不会明显地提高生产力。

六是一把菜刀。

vim是一个非常好,锋利,平衡的厨师的刀。

Emacs是一个轻的军刀。

大多数时候,我的工作要求我砍蔬菜。 有时候,我必须承担一大堆机器人。

我已经使用Emacs 20年了。 我正在用一个名为“It's All Text”的小部件在Emacs中input文本 ,这个小部件可以让我在Firefox中的文本框中input和输出文本。 我可以在Emacs中真的很快。 没有它,我的生产力就会大打折扣。

这是非常有争议的,但我也认为,学习Emacs可以教你一个关于编程的惊人数额。

根据你的代码,你可能会看到生产力的提高。 对于后台,我也是一个长期的vim用户,但是大约两年前我学习了emacs,现在可以互换使用。

是什么促使我学习emacs的实际意义在于它能够立即打开大量文件,并且可以轻松地在它们之间切换。 我正在介绍添加和触及大量课程的function。 (这是C ++,所以每个类通常有两个文件。)由于我仍然坚持接口,当我意识到需要更换另一个文件时,我通常会更新一个文件。

使用gvim,最容易为每个文件打开一个新窗口,这个窗口开始变得笨拙。 但是使用Emacs,在同一个窗口中打开一个新文件很简单(Ctrl-x,Ctrl-f)。 一旦Emacs打开了一个文件,在打开的缓冲区(Ctrl-x,Ctrl-b)之间来回切换是非常容易的。

进一步说,单个emacs会话可能会打开很多窗口,所以除了垂直分割窗口之外,我可以决定在不中断文件工作的情况下打开另一个窗口,让我有效地并行工作,同时仍然保持每个窗口的默认80个字符的宽度。

在vim中还有一些东西(例如块select模式,简单的macroslogging,diff模式)以及Emacs(线alignment,文件/缓冲区pipe理,窗口/屏幕pipe理)更容易的东西。 因此,我发现自己在两者之间交替(有时同时使用两者),这取决于我预期的编辑任务。

如果你还不确定,我build议你试试看。 通过Emacs教程运行,然后用它来编写一个早晨或一天的代码,并且非常重视帮助。 如果你仍然不喜欢你所看到的,留在vim中。 不pipe编辑带来什么,对工具的熟悉和知识将是您生产力中最重要的因素。

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

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

不,你不会看到生产率的提高,因为在emacs中使用的模式和隐喻可能不符合你的大脑。

你的问题的简短答案是“是”。 下面更详细的。

我几乎完全是从1980年到1991年使用vi。唯一一次我没有使用vi的时候,当我正在处理一个最小安装的Unix太小,不能包含vi,所以我不得不放弃,这是最初的vibuild立在最上面的编辑function的最小子集。

从大约1985年起,我工作的其他程序员不断在唱赞美emacs。 但是每次我试着去学习,我都不会走得很远。 我花了一个小时去浏览emacs turorial(Ch t),最后我知道如何插入和修改文本并在屏幕上移动。 我可以用vi来做更多的事情,而不是使用emacs在那个小时里学到的,我不能做这个切换。 三个月后,我有时间再花一个小时,最终我会用相同的材​​料。 Emacs有一个大写“L”的学习曲线。 直到我和其他人使用emacs签订合同时,我最终决定我需要花费一个多小时的时间来学习。 经过一天的工作,除了通过教程和所包含的文档工作之外,我终于到了可以用emacs做事情的地步,而我却无法使用vi。 从那以后,我从不想回去。 我仍然可以在睡眠中键入vi命令,但是我可以使用emacs做更多的事情。

理解我比较emacs和vi,而不是vim。 我从来没有学过vim添加到vi的扩展,很可能它们中的许多是从emacs复制的function。 如果是这样,如果你已经熟练掌握vim,emacs可能不会为你带来许多好处。

在emacs中我一直依赖的东西有:

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

  2. Emacs提供了一个可在字符单元terminal上显示的多窗口环境。 在位图graphics和真实窗口之前的日子里,emacs被编写成仅仅使用ascii字符和光标定位来模拟类似窗口的行为。 你可能会想:“那是古老的历史,今天为什么要关心这个呢?” 我仍然每天都在使用这个function。 我使用允许SSH访问的webhosting公司。 所以我可以通过互联网loginLinux主机并运行shell命令。 虽然function非常强大,但是能够使用emacs将terminal仿真器分成“windows”,在几个“窗口”中运行shell,在其他窗口中编辑文件,以及在其他窗口中查看和编辑目录,视窗”。

    实际上,当我在前面说“窗口”时,我的意思是“缓冲区”。 Emacs的窗口字符单元模拟是划分屏幕空间的一种方法。 emacs缓冲区与内容(一个文件,一个bashshell,一个目录,与文件没有关联的任意文本等等)相关联,可能或不可以显示。 要查看缓冲区中的内容,请select一个窗口,并告诉它要查看哪个缓冲区。 所以,你可以在屏幕上显示更多的东西。 这大致类似于您在图标化/去图标化窗口时在现代位图graphics用户界面中执行的操作。

  3. 我已经提到了可以在emacs缓冲区中运行一个shell的事实。 你可以拥有尽可能多的运行shell的缓冲区。 您可以在shell缓冲区和文本文件之间来回复制和粘贴文本,也可以使用完全相同的击键序列来比较shell缓冲区和文本文件之间的文本部分,这些击键序列将用于复制文本或比较两个不同文本之间的文本文本文件。 实际上,对于大多数types的缓冲区来说都是如此,而不仅仅是与文件关联的shell缓冲区和缓冲区。

  4. 当你使用emacs命令打开一个文件,但是你select的实际上是一个目录时,缓冲区以dired(目录编辑器)模式运行。 在这种模式下,无论光标当前指向哪个按键,都可以打开,无论是文件还是子目录。 dired模式下的缓冲区是一个文件pipe理器 – 一个面向Mac或Windows资源pipe理器的与Finder类似的字符单元terminal。

  5. 我几乎一直使用的emacs函数之一是“比较窗口”。 我非常喜欢这种命令行“差异”或GUI比较工具,如内置到Eclipse中的内容。 比较或Eclipse比较整个文件,并显示哪些行不同。 但是当你有两条看起来非常相似的不同线时会发生什么? 考虑以下:

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

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

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

    与diff和Eclipse不同的是,emacs的“比较窗口”function是互动的。 将光标定位在两个并排的窗口中的每一个窗口中的窗口内容相同的点上。 运行“比较窗口”,每个窗口中的光标将移动到不同的第一个字符。 将光标重新定位到其中一个窗口,与其他窗口相同的位置,然后重新运行“比较窗口”以查找下一个区别。 这使得比较文件的子部分变得容易。

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

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

    md5sum downloadedfile.tar.gz

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

  6. 在前面的例子中,我给出了运行“比较窗口”的例子:

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

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

    “比较窗口”将使光标位于每行中的撇号处。 所以,现在你知道哪些字符不同。 但是他们是什么angular色? 键入两个按键命令CTRL-x =,emacs将显示八进制,十进制和hex的字符,ascii值,文件开始处的字符偏移量以及从行首开始的字符偏移量。 由于ASCII是7位编码,因此所有ASCII字符都将其高位closures。 一旦你看到第一个撇号的值是0x27,第二个是0x92,很明显,第一个是ASCII字符集,第二个是不是。

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

  8. Emacs允许你通过告诉它什么时候开始记住你正在input的内容以及何时停止来创buildmacros。 这对于你经常做的任务是非常强大的。

  9. 如果你知道Lisp,Emacs是无限可扩展的。 但即使我从来没有学过Emacs Lisp,但我仍然发现Emacs是我使用过的最强大的工具之一。

  10. Emacs的键绑定。 我会成为第一个承认Emacs键绑定吸吮的人。 但它比我用过的其他任何东西都强大得多,所以我愿意忍受这些关键绑定。

  11. 多年前,Emacs的作者Richard Stallman(GPL的创始人,GNU项目的创始人和FSF的创始人)讽刺那些把vi和emacs当作圣洁战争的人。 他发明了Emacs教会的“圣徒IGNUcius”字符。 斯托曼说:“有时候,人们问我在Emacs教会里是否使用其他文本编辑器是一种罪行。呃,vi vi是兽的编辑,但是使用免费的版本六是不是罪,这是一种忏悔。“ (见http://stallman.org/saint.html ,还有一张可爱的照片,但由于我是StackOverflow的新手,所以不会发布多个url,所以请到相同的域名,但取文件saintignucius.jpg)

我在两年前曾经用了10年的时间来研究Emacs。 对于我的生产力曲线随着时间的推移如何修改,我有一个相当新的回忆。

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

如果你已经使用了Unix和命令行,并且熟悉Ca,Ce,Cn,Cp,Ck,Cy等命令行,那么在转换到使用相同的绑定(默认)在Emacs中。 我最近发现XCode也使用这些绑定。

如果你对一直运行的编辑器,缓冲缓冲区(就像你的浏览器标签)感到舒服,并且生活在应用程序中(就像在浏览器中使用Web2.0应用程序一样),Emacs可能会立即显示生产力增强。

如果您通常在许多相关文件的项目中工作,则此持久性在维护该缓冲区的上下文中会带来一些额外的好处。 每个缓冲区都在其打开的文件中占有一席之地,以便您为该项目(如grep-find,eshell,run-python和slime)方便地使用各种生产力提升工具。 与文本完成相结合,yasnippets等开始看起来像一个IDE的一小部分,虽然特设和个人化您的configuration。 这与欧洲央行更文明的Emacs IDE类服务不同。

我最初的生产力受到打击,因为我在第一个星期左右不断地input“jjjkkk”Esc-Esc-Esc-Esc。 接下来的一周,我谨慎地开始使用正确的导航键。 然后我发现了这个configuration文件…说实话,如果我从一开始就有Emacs入门套件的话,我会说我的生产力在3-4周时慢慢恢复到了平价水平,但是我确实下了configuration文件兔子洞。 不过,我的一位同事刚刚从vim转换到emacs,他只是抓住了入门套件,他正在路上。 第一个星期,他似乎很舒服,享受所有的惊喜(这种感觉可能会持续十年)。

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

我的简短回答是肯定的,值得花费3-4周的时间来学习Emacs。 即使您决定您更喜欢通过Emacs进行开发的简化的unix实用工具组合,您将从中得到一个广泛适用于编辑之外的教育。

Emacs文档是一个森林。 当我意识到Vim的文档是如何组织的时候,我从Emacs到Vim,以及许多function的可用性如何。 我不知道Emacs专家的道路是什么,但是我会提醒你,学习做任何有用的东西都需要很长时间,而且不会让你在nethack上更好。 坚持与Vim。

Textmate是Mac上更好的Emacs,尽pipe这对Solaris没有帮助。 Eclipse很酷,并有很多插件。

如果您愿意学习和定制它以满足您的需求,Emacs将提供生产力提升。 大多数人不是。 为了提高工作效率,您必须使用该工具进行简单的编辑 – 大多数人从来没有经过简单的编辑。

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

这就是说,如果你正在开发Java,Eclipse是标准答案,所以你的问题是非常没有意义的。

我对Vim非常满意,但是一旦听说过org-mode ,我开始学习Emacs。 组织模式可能是学习Emacs的一个强有力的理由。

我爱emacs并每天使用它。

也就是说,我不认为学习它的成本将会被生产力收益所弥补。

如果你正在编程Java,你需要一个好的IDE。 Emacs走向一个公平的方式,但让我们面对它,IDEA等人打败了它。 (emacs可能启发了很多IDE,但这是另一回事)。

两次我试图学习Emacs。 它只是不适合我的大脑工作,所以我不使用它。

Emacs(或vim)并不比vim(或Emacs)好得多。 两者都有很多选项可以让他们做出令人惊叹的事情。 我毫不怀疑,任何你可以在Emacs中完成的事情,你也可以在Vim中完成,而不是标准的。

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

我想进一步研究emacs,但是我不能长期使用它。 它伤害了我的手。 我做了什么可怕的错误?

vim和emacs,他们是最有能力的编辑,已经有相当长的一段时间了。 如果你真的认识一个人,我怀疑你会在这个过程中获得那么多。

然而,查看哪些插件是可用的,因为一些新的插件可以提高生产力。

/约翰

没有(我用过)。

沿着不寻找宗教战争的同样的路线(但是如果你觉得你必须这样做,那么请继续下去),为什么你觉得vi的唯一select是emacs? 它是你开发的操作系统,还是你探索的选项?

Java开发领域目前享有一些最好的IDE(免费和付费),如果不是代码编辑和重构支持的最佳select.telliJ IDEA甚至有一个vi插件,可以帮助您感受更多的在家,例如(不知道是否有类似的东西可用于Eclipse)。 虽然改变工具确实意味着学习曲线,但如果跳跃足够大,花费时间可能是值得的。

你打字多快? 如果你狩猎和啄食,那么emacs不适合你。 如果你的快速寿命,它可以帮助不必一直抓住你的鼠标。

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

如果您决定花时间编程您的文本编辑器,那么您的工作效率将会提高。 在这两个编辑器中,emacs提供了一个更好的框架或不断的定制。 如果你不编程你的文本编辑器,只要保持舒适。

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

我知道Vim和Emacs,而Vim更符合我的大脑和我的习惯。 但其他人对Emacs也有同样的看法。 除非你尝试,否则你永远不会知道。 学习Emacs并不需要很长时间,看看你是否喜欢它。

我的生产力真的会增加吗?

前几天/周,绝对不是。

每当你想要编辑一些东西时,你不必再阅读教程,那么确定..

Emacs比vim更“强大”,它的脚本引擎更加灵活,并且有更多的脚本,模式以及围绕emacs构build的类似内容。

也就是说,情况正好相反。如果你花费了相同的时间来提高你对vim的知识,那么你可能会同样高效。

也许没有相同的方式生产效率 – 我会说vim编辑文件更快,emacs更flymake-mode于做其他事情(再次,我个人会说flymake-mode ,VCS绑定比vim更快当量)

我同意Alan Storm:“因为Emacs中使用的模式和隐喻可能不符合你的大脑”

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

我非常喜欢Emacs的一些主要function,并且可以轻松使用这些function,并且我将其视为一种提高生产力的function:
1.“yank-pop”工具 – 每个剪切/复制都保存在一个堆栈中,以便以后可以select要粘贴的内容(不知道vi / Vim是否有这个function,但是大多数的Java IDE都没有)
2. Ctrl键导航映射 – 这使您可以导航文件,而无需移动双手使用箭头键。 (其他编辑键绑定当然有帮助)
3.在几乎所有的平台上都可以使用(当然也可以是vi / Vim) – 无论是基于GUI还是基于文本(Java IDE在大多数平台上也可用,但只能在GUI模式下使用,而且需要单独安装而Emacs通常更广泛的可用 – BSD / * nix / Linux / Mac系统
4.我更喜欢我的编辑器,直到我需要它时才保持原样 – Emacs的斯巴达显示器在input之前迫使我思考。
5. Emacs中的基本导航键是普遍可用的 – 在我的Mac OS上,我可以在terminal,Mac邮件等中使用这些键。

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

由于vi / Vim和Emacs在他们可以或不可以做的事情上非常接近,这两位编辑的生产力来自使用它的经验。

在我看来,作为一名程序员,一旦开始使用Emacs,就不会花费很长时间才能得到有关Emacs的一般想法。 其他人只能这么说,你必须自己去尝试才能知道。

至于我,我都用。 这就像拿一件以上的武器参加一场战争,在正确的情况下使用正确的武器。 ;)

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

免责声明:我无知。 我已经是一个emacs用户大约4年,vim用户大约6个月,也许更像15个,如果你一直计数,我试图学习它,恨它。 (The writing vs moving mode distinction kills me. Every time. So if it doesn't kill you then my opinion might be completely worthless.) That said, I think my opinion is actually interestingly different from the 26 others that I've seen on here, so I'm going to voice it. :Disclamer

My opinion:

  • Emacs is better for typing, especially large-scale "I'm writing a new feature and it will be a while before I even try to see if it runs".
  • Vim is better for editing, especially quick edits.

When I need to understand and hack in 8 files simultaneously, Emacs' properties as a tiling window manager with multi-buffer (buffers have a 1.2:1 correspondence to files, they're often the same thing, but aren't necessarily) regexp-search (and replace) are incredible.

If I don't like some small thing because of git diff in the shell (I don't use emacs' VC features very often, although when I do I love them) I open it with vim and get the hell out faster than I could hit Alt-TAB .

The fact that Emacs' editing commands are more readily available while typing make typing much faster than it is in Vim. Ctrl+a is much faster than ESC ^ i , and you don't have the cognitive load of "do I want a or i or o or O …" which, god, I hate thinking about. And same for all the other movement commands commands.

I type faster, much faster, in Emacs. That means things like Org Mode (which I use for everything: TODO lists, bug tracking, notes, long emails, documentation…) make more sense (to me) in Emacs than they would in Vim.

And, Elisp is incredible, even though it sucks. It totally makes up for Emacs' broken regular expressions: you can use the full power of emacs everywhere , including in a multi-file regexp-replacement. And in text snippets .

If you are concerned about the health of your hands choose Vim.

I suffered from a bout of RSI in the past, and I found one of the main culprits was "chording" ie holding down many keys at the same time. Emacs uses chording extensively whilst VIM uses single letter commands chained in quick succession. This puts much less strain on your hands as the muscles don't have to twist and contort to perform commands in the editor. Injury due to RSI can ruin your productivity so in your calculations be sure to account for this.

I really see no reason to switch. I've used vi for a long time and am quite comfortable with it; about every six months I would install emacs to give it a go, then quickly just switch back. Yes there were things I much preferred about vi, but the main reason I never stuck with it is because the time investment to fully learn another editor when I already know an extremely capable one isn't worth it.
I'm reminded of this rather dated study.

In my opinion, SLIME is about the only reason to switch to emacs if you're already proficient with vi.

没有

I've been using emacs for years, I'm a convert from VIM, and I love it to bits.

But any productivity gains from having a better, programmable editor will be totally wiped out by the enormous amount of head-fucking that it takes to get the hang of emacs. It was designed as a console editor, and its idea of interface is not yours.

And even when you've got it completely, your extra productivity will mainly be expressed in the extra emacs lisp you can write.

谁在乎? It's great fun, and lisp is the dogs! If you want to 'get things done', then forget about programming. You can always hire programmers to 'do' 'things'.

The only circumstance under which I'd recommend learning emacs for productivity reasons is if you're a lisp/scheme/clojure programmer. It makes such a good lisp environment that then the few seconds it will save you every time you want to do anything will quickly add up to a real gain. And elisp (which stands in relation to lisp as excel macros stand to ALGOL) will seem much less alien if you already use a real lisp.

If you do give it a try, use it on a virtual console where it feels more like a sane way to arrange an editor. Only when that makes sense try to use it under a window system, which will fight with it.

In an earlier answer, Aristotle Pagaltzis wrote: "Vim excels in the small … You can easily do things in Vim in the normal course of editing that would require you to drop down to scripting in Emacs."

I switched to Emacs after over a decade of exclusively using vi, and initially I would have agreed with the claim, "You can easily do things in Vim in the normal course of editing that would require you to drop down to scripting in Emacs." But then I discovered that by using Emacs' macro capability and a large repeat count, I could easily make Emacs do pretty much everything that vi had made easy, and a great deal more.

Emacs' macro functionality involves three commands:

 Cx ( start remembering keystrokes Cx ) stop remembering keystrokes Cx e replay the remembered keystrokes 

For example, in vi if I wanted to find all <a> tags in an HTML file and add a target attribute, I might do something like the following:

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

This example is not perfect, since it assumes that all <a> tags are on a line by themselves. But it's good enough for illustrating how one accomplishes the equivalent task in two different editors.

To achieve the same effect easily in emacs, here's what I do:

 1. Cx ( 2. MCs <a\> 3. Cb 4. Cs > 5. Cb 6. target="_blank" 7. Cx ) 8. Cu 10000 Cx e 

Here's a description of what each keystroke above does:

 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 

It looks complicated, but it's actually very easy to type. And you can use this approach to do lots of things that vi can't do, without ever dropping down to Lisp code.