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

时间:2008-09-07 01:22:09

标签: vim emacs editor text-editor

在前面:我想要开始宗教战争。

我已经使用 vi ,只要我记得,而且我曾经尝试过几次 Emacs 我已经迷失了我很快就放弃了。然而,很多人发现Emacs非常强大。它的可编程性有点传奇。我主要做Solaris + Java开发,我想问一个简单的问题:如果我花时间去了解Emacs,我的工作效率会提高吗?它在 Vim 上提供的功能是否会在合理的时间范围内提高生产力?

重复:我不想要“我的编辑比你好”的回答。对于是否值得投入时间,我只想要一个是或否答案。我的工作效率会真的提高吗?

29 个答案:

答案 0 :(得分:43)

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

Vim擅长于:通过使动作和动作分离概念并为复杂的重复提供设施,您可以在短暂的击键序列中执行令人难以置信的强大编辑操作。您可以在正常的编辑过程中轻松地在Vim中执行操作,这需要您下载到Emacs中的脚本。此外,您使用的大部分功能都是开箱即用的,因此即使您拥有广泛的.vimrc自定义功能,您也可以通过任何 Vim安装进行高效工作。

Emacs在大型方面表现优异:通过将其所有UI概念直接映射到Elisp中的基本构造和概念,全局为特定类型的文件或环境引入功能变得非常容易,使Emacs像基于文本和更加结构化的可编程Excel形式。这假设您将花费大量时间根据个人需求和偏好定制您的环境。当然,Emacs确实尽力让你能够轻松地在一个环境中保留所有你想做的事情。

最终,两者都不是优越的。它们提供不同的风格,根据您的倾向,一个或另一个将更适合您的个人需求和思维方式。当然,了解两者(加上更多编辑者)总是有帮助的。但是你不会以这种方式或那种方式提高效率。

答案 1 :(得分:35)

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

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

我现在会停止漫步。使用emacs会增加生产力吗?否。

更新:请参阅下面的评论。自从我发布这个以来,我已经遇到了使用emacs比使用vi更有效率的方法。

答案 2 :(得分:29)

vi是一把菜刀。

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

Emacs是一把轻剑。

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

我已经使用Emacs 20年了。我正在使用名为"It's All Text"的小部件输入Emacs,这样我就可以在Firefox中的文本框中输入文本。我可以在Emacs中快速前进。没有它,我的工作效率会大大降低。

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

答案 3 :(得分:27)

根据您的编码方式,可能会看到提高工作效率。作为背景,我也是一个长期的vim用户,但是大约两年前我学习了emacs,现在可以互换使用它们。

让我真正学习emacs的原因是它能够同时打开大量文件并轻松切换它们。我正在介绍一个添加并触及大量课程的功能。 (这是C ++,所以每个类通常有两个文件。)由于我仍然坚持界面,当我意识到我需要改变另一个文件时,我通常会更新一个文件。

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

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

在vim中仍然有一些我觉得更容易的事情(例如块选择模式,简单的宏录制,差异模式),以及在Emacs中更容易的事情(行对齐,文件/缓冲管理,窗口/屏幕管理) 。因此,我发现自己在两者之间交替(有时同时使用两者),这取决于我预期的编辑任务。

如果您仍然不确定,我建议您尝试一下。运行Emacs教程,然后使用它来编写早上或一天的代码,严重依赖于帮助。如果你仍然不喜欢你所看到的,请留在vim。无论编辑带来什么,您对该工具的熟悉程度和知识将是您工作效率中最重要的因素。

答案 4 :(得分:17)

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

是的,由于强大的功能,您可能会看到提高工作效率。

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

答案 5 :(得分:13)

答案 6 :(得分:12)

我用Vim工作了10年,直到2年前深入研究Emacs。我对我的生产力曲线如何随着时间的推移而进行了相当新鲜的回忆。

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

如果你已经使用Unix和命令行足够长,以至于你熟悉Ca,Ce,Cn,Cp,Ck,Cy等,因为它们在shell上运行,转换到使用它们不会花费很长时间Emacs中的绑定(默认值)。我最近发现XCode也使用这些绑定。

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

如果您通常在许多相关文件的项目中工作,则此持久性会为维护该缓冲区的上下文带来一些额外的好处。每个缓冲区都在其打开的文件中进行上下文,从而可以方便地为您的项目使用各种生产力提升工具(如grep-find,eshell,run-python和slime)。这与文本完成,yasnippets等相结合,开始看起来像IDE一样很小,尽管ad-hoc和你的配置个性化。这与ECB之类的更加文明的Emacs IDE类服务不同。

我的生产力最初受到了打击,因为我在第一周左右不断输入“jjjkkk”Esc-Esc-Esc-Esc。接下来的一周,我小心翼翼地开始使用正确的导航键。然后我发现了配置文件...老实说,如果我从一开始就有Emacs Starter Kit,我会说我的生产力在第3到第4周慢慢恢复到平价但我确实顺着配置文件兔子洞。不过,我的一位同事刚从vim过渡到emacs,他只是抓住了入门套件,他正在路上。第一周,他似乎很舒服,享受所有惊喜的好处(感觉可能会持续十年)。

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

我的简短回答是,是值得花费3-4周的时间来减少生产力,以学习Emacs。即使您决定优先使用简化的unix实用程序组合而不是Emacs进行开发,您也可以从中获得除编辑之外广泛适用的教育。

答案 7 :(得分:10)

Emacs文档是一个森林。当我意识到Vim的文档是如何有条理的时,我从Emacs来到Vim,以及许多功能是多么的可用。我不知道Emacs专家的道路是什么,但我会警告你,学习做任何有用的事情需要很长时间,并且不会让你在nethack上更好。坚持使用Vim。

Textmate对于Mac来说是一个更好的Emacs,虽然这对Solaris没有帮助。 Eclipse很酷,并且有很多插件。

答案 8 :(得分:8)

如果您愿意学习和定制它以满足您的需求,Emacs将提高生产力。大多数人不是。为了提高工作效率,您必须使用该工具进行简单编辑 - 大多数人永远不会进行简单的编辑。

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

话虽这么说,如果你正在开发Java,Eclipse是标准答案,所以你的问题是没有实际意义的。

答案 9 :(得分:7)

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

答案 10 :(得分:5)

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

尽管如此,我认为学习它的成本不会因生产力的提高而得到补偿。

如果您正在编写Java,那么您需要一个好的IDE。 Emacs走向成为一体的公平道路,但让我们面对它,IDEA等人击败了它。 (emacs可能启发了很多IDE,但这是另一个故事)。

答案 11 :(得分:4)

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

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

试试Emacs。看看它是否更合适。这是一个没有失败的情况。

答案 12 :(得分:3)

不(我已经同时使用过两者)。

答案 13 :(得分:3)

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

但是,从那以后查看可用的插件总是一个好主意 一些新的插件可以为生产力创造奇迹。

/约翰

答案 14 :(得分:3)

我想进一步研究emacs,但我不能长时间使用它;它伤到了我的手。我做了一件可怕的错事吗?

答案 15 :(得分:2)

你输入的速度有多快?如果你打猎和啄食,那么emacs不适合你。如果您的速度很快,它可以帮助您不必一直抓住鼠标。

答案 16 :(得分:2)

通常,emacs比vi更强大。你可以在emacs中做更多的事情。

答案 17 :(得分:2)

沿着不寻找宗教战争的同一条路线(如果你认为必须继续向下并向下投票),为什么你觉得vi的唯一选择是emacs?它是您开发的操作系统,还是您探索的选项?

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

答案 18 :(得分:1)

我同意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的理念吸引你,你将付出额外的努力来学习它。它会奖励你。

答案 19 :(得分:1)

免责声明:我无知。我已经成为emacs用户大约4年了,vim用户大约6个月,如果算上我试图学习它并且讨厌它,可能更像是15。 (写作与移动模式的区别使我丧命。每一次。所以如果它不会杀死你,那么我的意见可能完全没有价值。)那说,我认为我的意见实际上与我见过的其他26个有趣的不同在这里,所以我要说出来。 的:Disclamer

我的意见:

  • Emacs更适合打字,特别是大规模的“我正在编写一个新功能,我会在尝试之前看看它是否会运行”。
  • Vim更适合编辑,尤其是快速编辑。

当我需要同时理解和破解8个文件时,Emacs的属性作为具有多缓冲区的平铺窗口管理器(缓冲区与文件的对应关系为1.2:1,它们通常是相同的,但不是必须)正则表达式搜索(和替换)是不可思议的。

如果我因为shell中的git diff而不喜欢一些小东西(我不经常使用emacs的VC功能,虽然我喜欢它们)我用vim打开它地狱的速度比我Alt-TAB更快。

Emacs的编辑命令在输入时更容易获得这一事实使得输入比在Vim中更快。 Ctrl+aESC ^ i ,并且您没有“我想要ai或{{}的认知负荷1}}或o ......“哪,上帝,我讨厌思考。对于所有其他移动命令命令也是如此。

我在Emacs中输入更快,更快。这意味着Org Mode(我用于所有内容:TODO列表,错误跟踪,笔记,长电子邮件,文档......)在Emacs中对我来说比在Vim中更有意义。

而且,Elisp令人难以置信,即使它很糟糕。它完全弥补了Emacs破坏的正则表达式:你可以使用emacs 到处的全部功能,包括在多文件regexp替换中。在text snippets

答案 20 :(得分:1)

如果您担心手的健康,请选择Vim。

我过去曾经遭遇过一次RSI,我发现其中一个主要原因是“chording”,即同时按住许多键。 Emacs广泛使用和弦,而VIM使用快速连续链接的单字母命令。这样可以减轻手上的压力,因为肌肉不需要扭曲和扭曲来在编辑器中执行命令。 RSI造成的伤害可能会破坏您的工作效率,因此在您的计算中一定要考虑到这一点。

答案 21 :(得分:1)

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

答案 22 :(得分:1)

如果您决定花时间编写文本编辑器,那么您的工作效率会提高。在两个编辑器中,emacs提供了更好的框架或不断的自定义。如果您不编写文本编辑器,请保持舒适。

答案 23 :(得分:1)

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

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

答案 24 :(得分:1)

  

我的工作效率会真的提高吗?

前几天/几周,绝对没有。

每次想要编辑内容时都不必阅读教程 - 确定..

Emacs 比vim更“强大”,它的脚本引擎更灵活,并且有更多的脚本,模式和围绕emacs构建的喜欢。

那就是说,情况恰恰相反。如果你花了相同的时间来提高你对vim的知识,你就可以提高效率......

也许以同样的方式没有效率 - 我会说vim编辑文件更快,emacs更擅长做其他事情(再次,我个人会说像flymake-mode这样的事情,VCS绑定更快使用比vim等效物

答案 25 :(得分:1)

由于vi / Vim和Emacs在他们能做或不能做的事情上非常接近,因此这两位编辑的工作效率来自于使用它的经验。

在我看来,作为一名程序员,一旦你开始使用它,你就不会花很长时间来了解有关Emacs的一般概念。其他人只能这么说,你必须亲自尝试才能知道它。

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

答案 26 :(得分:0)

没有

我多年来一直在使用emacs,我是VIM的皈依者,我喜欢它。

但是,拥有一个更好的可编程编辑器所带来的任何生产力的提升都将被完全消除,因为它需要大量的头脑风暴才能获得emacs。它被设计为控制台编辑器,它的界面理念不是你的。

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

谁在乎?这很有趣,而lisp就是狗!如果你想“完成任务”,那就忘了编程。你总是可以聘请程序员来“做”事情。

出于生产力原因,我建议学习emacs 的唯一情况是,如果你是一个lisp / scheme / clojure程序员。它创造了一个非常好的lisp环境,那么每次你想要做任何事情时它会为你节省的几秒钟就会迅速增加真正的收益。如果你已经使用了真正的口齿不清,那么elisp(与lisp相关的excel macros代表ALGOL)似乎就不那么陌生了。

如果你试一试,可以在虚拟控制台上使用它,感觉更像是一种安排编辑器的理智方式。只有在有意义的情况下才尝试在窗口系统下使用它,它将与之抗争。

答案 27 :(得分:0)

我真的认为没有理由改变。我已经使用了很长时间的vi并且对它很满意;大约每六个月我会安装emacs来试一试,然后快速切换回来。是的,有些事情我更喜欢vi,但我从不坚持的主要原因是因为当我已经知道一个非常有能力的人时,完全学习另一个编辑的时间投入是不值得的。
我想起了这个rather dated study.

在我看来,如果你已经精通vi,SLIME是关于切换到emacs的唯一理由。

答案 28 :(得分:0)

在早期的回答中,Aristotle Pagaltzis写道:“Vim擅长于小...你可以在正常的编辑过程中轻松地在Vim中做事,这需要你下载到Emacs中的脚本。”

经过十多年专门使用vi后,我转而使用Emacs,最初我会赞同这样的说法,“你可以在正常的编辑过程中轻松地在Vim中做一些事情,这需要你下载到脚本中Emacs的“。但后来我发现通过使用Emacs的宏功能和大量的重复计数,我可以很容易地让Emacs做了很多事情,这些事情很简单,而且还有很多。

Emacs的宏功能涉及三个命令:

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

例如,在vi中,如果我想在HTML文件中找到所有<a>标记 并添加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代码。