it-swarm.cn

我使用IDE(Eclipse)开发软件。为什么要切换到vim或emacs?

我的日常工作是Java/Web开发人员。我已经使用Eclipse大约5年了。我认为它很棒,而且我也将Webstorm用于javascript和html/jsp。

我有时候需要将ssh放入服务器并弄乱配置文件;为此,我使用vi,这让我很痛苦。我必须建立一个列出语法/命令的网页:按Escape键,然后按asterix键,转三圈,然后将文本输入到光标上方两行。对我来说是如此(不直观),我想像任何在八十年代八十年代末长大的人。

这是我认为Eclipse出色(并且假设使用其他IDE的原因)并且不切换到emacs和/或vim的主要原因。

  • 突出显示错误,无需重新编译项目。
  • 代码协助。
  • 重构。
  • 开幕电话hiearchy /开幕宣言。
  • 与源代码控制完全集成。
  • 包含调试器。
  • 第三方插件的可用性-例如findbugs/checkstyle。

我听到的论点之一是,使用emacs/vim可以创建自己的插件-很好,但是您也可以在Eclipse中完成。但是您不需要,因为一切都已经存在!就像说买这辆半成品车一样,您可以自己制造其余的。

人们为什么使用emacs/vim?使用它的人实际上在大型组织中的复杂面向对象项目上工作吗?

切换到vim/emacs的原因是什么。如果切换,生产率将如何提高?

31
NimChimpsky

使用适合您需求的任何工具。如果您必须登录到远程服务器并编辑配置文件或类似文件,那么知道VIM或Emacs就是一件好事。我知道VIM ,但是我不会用它来用Java开发,这就是Eclipse,Netbeans等的用途。

36
user281377

Emacs和Vi仍然占有一席之地。

  • 它们在Unix和类似Unix的环境中无处不在,并且可以安装在大多数其他流行的平台上。

  • 它们很流行且稳定,因此从长远来看,一旦学习便会有所收获。

  • 它们在文本终端上运行,因此您可以在telnet和ssh会话中使用它们。

  • 它们提供了多种语言的编辑模式和语法突出显示功能,包括非常新的和非常罕见的语言。 (这是我最喜欢的优点之一。)

但是,了解这些程序的关键是要知道它们最初打算解决什么问题。对于Vi,这是通过终端连接编辑文本文件的速度低至300 Baud。在那种环境下,如果可以避免的话,您就不想显示菜单或从根本上改变屏幕内容。

Emacs旨在用于更快的环境中。它的优势在于它只能加载一次,并且永远不会退出。用户可以通过Emacs完成他们需要的其他任何任务,而无需离开,并且通常比他们必须从命令行完成的方式更为友好。人们没有打开Emacs窗口的图形化桌面环境。 Emacs允许用户仅需敲击几下即可完成几乎所有正常任务(以及许多奇怪的任务)。任何未内置的内容都可以编写脚本。

自引入这些程序以来,人们的需求显然已经发生了很大变化,但它们仍然具有真正的优势。我已经学习了两者的基础知识,并每周使用它们。不过,我认为他们的优势常常被夸大了。他们已经取得了传奇般的地位,以至于人们不承认自己的弱点,反而倾向于认为如果Emacs/Vi不能使他们的工作效率超过Eclipse或Visual Studio,那么他们做错了。

现在到了重点。

Java是在Eclipse中提供出色支持的流行语言,您很可能正在现代操作系统上开发代码,该代码使您无需通过IDE即可快速完成常见任务并编写其他脚本。我认为切换到您没有意义。

39
PeterAllenWebb

我已经使用emacs超过5年了。我无法再告诉您我正在使用的按键组合,我的手指只能记住它们,而只能看着键盘来看看我的手在打字。

几年前,我开始使用Eclipse,并且没有机会免费回到emacs。对不起的肌肉记忆,即使您缺少旧的_C-x r SPC 1_,Eclipse也使我的工作效率提高了,这才是重要的。

不,我不认为您应该切换,但是您应该花几个小时来学习vim的基础知识,这样您就不必再查找了。

16
Martin Wickman

为什么要切换到vim或emacs?

很可能不应该切换。 Vim是出色的,功能强大的文本编辑器,但它不是替代IDE,并且不应该! Eclipse非常擅长于其IDE子集专用的东西,而vim擅长于其特定于文本编辑的东西的子集。每个人都有自己不同的重点。

我知道有些插件可以扩展vim的功能,以便它可以完成许多IDE特定的事情,而IDE可以。但是它仍然不是vim的主要优点,而IDE几乎总是可以做得更好。因为这是他们的重点。

我在日常工作中要做的是同时使用Visual Studio和vim编辑C#。这对我来说非常有效,而且我绝不会割断其中一个完全依赖另一个。

就emacs而言,我不是专家,但是我不认为它可以与Eclipse的IDE功能有关Java(请正确如果我用错了,请问我。)如果您使用LISP进行开发,则它确定地可以被认为是出色的IDE,但我认为它对Java的支持不同。

因此,如果您希望将更强大的文本编辑器与Eclipse一起使用,那么我绝对建议您学习vim或emacs。但是作为补充,而不是替代。从长远来看,即使它们都没有特别容易学习的曲线,它也确实可以带来回报:)

这是关于vim优势的 阅读全文 。这是 列表 您可以做的一些不错的技巧。

7
Nick Knowlson

基本上,请阅读 this (PDF)以了解Emacs为什么功能强大。了解LISP后,几乎可以轻松地为其编写扩展名(通过我为自己编写的名为employer-mode的加载项,我有几个源代码控制工作流和部署脚本)。根据您上面列出的内容;

  • 突出显示错误,无需重新编译项目。 并非对所有语言都有意义。您可以轻松地将多种语言的REPLs集成到其中。现在,我有Ruby,_pythonhaskellcommon LISPschemeerlang都挂接到了emacs中。顺便说一句,JavaScript插件js2-mode具有完整的增量“编译”,因此它会为您突出显示诸如语法错误之类的东西,因此当然有可能,但不是规范
  • 代码协助。 有一个名为autocomplete.el的插件,我相信,请检查 Emacs Wiki
  • 重构。 我假设您的意思是“自动重构”,但这并不是在所有语言中都有意义。对于某些人来说可能存在,但我不知道。
  • 开幕电话hiearchy /开幕宣言。
  • 与源代码控制完全集成。 自Emacs 22.3起内置了git-mode,不确定其他源代码控制
  • 包含调试器。 这里是每种语言的基础。通常,如果它具有REPL=集成,则它也具有Emacs调试器,但不是通用的
  • 第三方插件的可用性-例如findbugs/checkstyle。 不知道这些特定的内容,但是有很多附加内容,从为什么这不是基本包有用到完全轻浮

就是说,如果您不喜欢LISP,又不想学习它,那么我就不能诚实地推荐Emacs。从中获得的收益是学习工具制作和应用这些原理来提高自己的生产率,而不是获得一堆现成的mod并将它们串在一起。

6
Inaimathi

我在这里看到两个选择:

  • 改用Nano-这与Windows for Linux中的记事本完全一样。不需要热键组合,只需键入nano somefile.conf,您有一个不错的编辑器。您甚至可以 添加语法突出显示
  • 将程序保留在本地并通过SCP同步到服务器-当我需要在小型网站上工作但没有足够的资源在本地运行Apache时,可以执行此操作。我只是启动WinSCP,启动我想要的目录,然后使用“保持远程文件为最新”。变化通常以秒为单位
  • 使用编辑器/ IDE中的插件可以“直接”使用远程文件-在关心版本控制之前,我只是启动了Notepad ++(我喜欢的编辑器)并使用NppFTP来处理文件。 NppFTP比WinSCP选项更快,因为Npp会在保存文件时立即告诉它,文件会立即上传。但是,正如我所说的那样,您没有进行版本控制。我确定有一个可以使用的Eclipse插件

希望这可以帮助

3
TheLQ

就个人而言,我喜欢Vim,因为它在编辑文本方面非常擅长,即非常符合人体工程学(键绑定不会使我的手承受太大的压力,并且我也不需要太多地使用鼠标)并且一旦掌握了窍门就可以高效使用(当然,这对于初学者来说不是最直观的编辑器,这将需要时间和耐心)。

但是,由于许多现成的功能,我更喜欢Eclipse用于大规模Java开发。当然,有 某些插件 可以使Eclipse有点更宽容。

2
user7908

我目前正在尝试从NetBeans切换到vim。学习vim需要时间和实践,但是我看到了它的优势,在某些情况下,我们称其为“ GUI编辑器”。

但是,与您不同,我主要使用Ruby进行编码,并且不需要NetBeans和Eclipse提供的所有代码生成,自动完成,重构我的代码黑魔法。如果我正在编码Java或C#,那么我绝对不会尝试切换。

1
Mladen Jablanović

作为emacs的长期用户,我觉得emacs在编辑和开发环境中相当舒适(并且在某种程度上,它还与构建过程,版本控制,快速的上下文相关搜索等集成在一起,因此我认为这符合条件)作为“ IDE”)。

我对使用vi和类似vi的编辑器也非常满意(我开始使用ed,因为我认为emacs太复杂了;回想起来这是倒退的,但这确实为我以后学习vi奠定了坚实的基础)。我主要将vi用于“小型快速编辑”,主要用于未安装emacs的远程计算机上。

对于您的“我有时需要ssh进入服务器并弄乱配置文件;为此我使用vi”方案,我建议使用一小套命令和一些关于vi的一般想法:

  • Vi不是模态的,它具有“ a”(附加),“ A”(附加在行尾),“ i”(插入)和“ I”(在行首插入)命令,将文本插入作为参数并用Esc表示“命令结束”
  • h,j,k和l是移动键。它可以使用箭头键起作用,但是由于典型的VT样式“我是箭头键”序列以Esc开头,所以这会破坏您没有想到的text-insertion命令
  • linenum将您移至第linenum行,第1行是顶部-多数行和第$行是最底端的一行
  • 是“重复最后一个命令”命令(请参阅第一个项目符号点)

“我可以放心地编辑文本文件,但我可能没有效率”,花了大约一两个小时的时间才可以玩vi,这与您可能需要的一样好。 。失败的话,任何不喜欢在制表符和空格之间进行自动转换的编辑器都应该“足够好”以达到您的目的。如果将Eclipse安装在所有所有远程服务器上,那么我认为使用它并不是一个大问题。

1
Vatine

如果您对Eclipse感到满意,请不要切换。

如果可以在任何需要的地方使用Eclipse,请不要切换。

如果您的项目/公司几乎全部使用Eclipse,请不要切换。

如果仅很少需要其他东西,请为其中一个编辑器打印 cheat-sheet ,并在需要时将其从抽屉中拉出,然后重新使用Eclipse。

参见(SO)的(相同)问题: https://stackoverflow.com/questions/1346820/what-are-the-efficiencies-afforded-by-emacs-or-vim-vs-Eclipse

至于回答,“使用它的人实际上在大型组织中从事复杂的面向对象的项目吗?” -戴上帽子,但答案是肯定的。我从事的项目有数千万行代码,这些代码用于设计运行用于询问此问题的计算机的CPU的关键路径。人们尝试了Eclipse,但发现它太慢且笨拙(尽管,当然,我们没有使用Java)。

1
Trey Jackson

我是一个Emacs家伙。我在所有编程中都使用了它,并积极鼓励我的同事也使用它(他们也积极地忽略了我)。我发现它比任何IDE都更具生产力,而且我永远都不会改变。

除非我写Java或C#(而且我想这个类别中还有其他语言)。)他们有这么大的stuff带有长名称的库,所以会得到- [〜#〜] i [〜#〜]使用Emacs获得的所有信息都完全消失在试图记住所有事情上。

我当然鼓励您try vim和/或Emacs。但是您很可能最终会回到Eclipse for Java。

1
MattBelanger

Emacs和vim都是可配置且功能强大的编辑器,一旦掌握了基本概念,两者都可以极大地提高生产力。

Vi赢得了本质上基于集合的操作。例如,在类定义中将“ foo”的所有实例更改为“ bar”是一种方法。

Emacs同样强大,但是您必须学习Emacs LISP才能充分利用它。

无论哪种情况,只有计划将emacs或vi用于everything时,才值得切换。

1
Larry Coleman

最好的工具(短期内)是您精通的工具。

人们使用30年以上的技术是因为他们精通该技术。他们围绕这些工具建立了工作流程和习惯。如果您对Eclipse这样的现代IDE)较为熟悉,则没有太多理由进行切换。学习如何更有效地使用Eclipse可以节省您的时间(例如,使用- Mylyn )。

1
dbkk

就个人而言,这两个程序都使我无所适从。 Eclipse的问题在于,当您处理大型项目时,Eclipse的运行速度很慢,这是因为它没有执行“ DGLP索引”或其他任何操作。要刷新您的存储库?有15分钟?哦,那是个妙招,在这里Ctrl-C某些文本,然后在某处Ctrl-P替代,但不是将其放到想要的位置,而是打开一个完全不同的文件并粘贴到其他内容上,而您却想知道wtf是否在那里首先。哦,我是否提到在vpn上使用Eclipse处理大型项目?几乎是不可能的。

至于vim,如果您偶然发现自己处于某种未知的模式,它会假设您知道许多完全无意义的按键组合,使其能够发挥作用并带来好运。同样,使用vim,您几乎必须了解整个项目的目录结构,才能打开正确的文件。 Vim的主要优点是,理论上您可以更快地创建代码,因为它具有所有键,但实际上我并不在乎我要写多少文本,不是因为文本量决定着代码的质量以及质量代码需要连续几个小时盯着数十个文件,直到您弄清楚要键入的正确内容(通常很短)。

我希望有人编写一个命令行程序,例如vim,实际上在侧面具有诸如Eclipse之类的目录结构,或者您可以扩展/折叠或打开文件的目录结构。有人知道吗?

0
Dallas Caley

我对可用的各种UNIX编辑器没有任何问题,但是我只是在抗议下使用它们。正如我所说,不是因为我与他们有问题,而是因为如果我必须使用它们,则意味着我们的部署过程在某种程度上缺乏。

这可能应该得到更多的信息:我在大型电子商务解决方案上工作,控制我们系统运行的一切都是通过一键式构建/部署过程生成的。我们有一系列的测试环境,因此在任何给定的时间,我都可以通过Eclipse进行更改,将其检入cvs并触发构建/部署以证明我的修复程序有效。所以-如果我在'vi'中乱搞,那是因为我们等不及部署的1小时周转时间,或者是因为部署不包含我正在编辑的文件,因此需要扩展才能执行因此(否则,下次有问题的文件需要更改时,我将在vi中进行黑客入侵)。

0
DanW