IntelliJ中可能的东西在Eclipse中是不可能的?

Epa*_*aga 365 java eclipse ide intellij-idea

我听过那些已经转向任何一方并且发誓这些人的人.

作为一个巨大的Eclipse粉丝,但没有时间尝试使用IntelliJ,我有兴趣听取IntelliJ用户的说法,他们是"前Eclipsians",你可以用IntelliJ做一些你不能用Eclipse做的具体事情.

注意:这不是一个主观问题,也不意味着变成IDE圣战.请低估任何flamebait答案.

Pav*_*man 185

CTRL-click可在任何地方使用

CTRL-click使你到达定义点击对象的地方无处不在 - 不仅在Java类和Java代码中的变量,而且在Spring配置中(你可以点击类名,属性或bean名),在Hibernate中(你可以单击属性名称或类或包含的资源),您可以在Java类中单击导航到它用作Spring或Hibernate bean的位置; 点击包含的JSP或JSTL标签也可以工作,按住CTR变量或函数可以将它带到它定义的位置,或者如果有多个地方则显示菜单,包括HTML或JSP中的其他.js文件和JS代码文件.

许多语言的自动完成功能

过冬

在Spring配置中,在HQLnate配置(包括类,属性和数据库列名称)中自动完成HSQL表达式

<property name="propName" ref="<hit CTRL-SPACE>"
Run Code Online (Sandbox Code Playgroud)

它将显示您可以注入该属性的那些bean的列表.

Java的

Java代码中非常智能的自动完成:

interface Person {
    String getName();
    String getAddress();
    int getAge();
}
//---
Person p;
String name = p.<CTRL-SHIFT-SPACE>
Run Code Online (Sandbox Code Playgroud)

它只显示getName(),getAddress()toString()(只有它们按类型兼容)并且getName()在列表中排在第一位,因为它具有更多相关名称.仍在EAP中的最新版本8具有更智能的自动完成功能.

interface Country{
}
interface Address {
    String getStreetAddress();
    String getZipCode();
    Country getCountry();
}
interface Person {
    String getName();
    Address getAddress();
    int getAge();
}
//--- 
Person p;
Country c = p.<CTRL-SHIFT-SPACE>
Run Code Online (Sandbox Code Playgroud)

它会默默地自动完成它

Country c = p.getAddress().getCountry();
Run Code Online (Sandbox Code Playgroud)

使用Javascript

JavaScript中的智能自动填充功能.

function Person(name,address) {
    this.getName = function() { return name };
    this.getAddress = function() { return address };
}

Person.prototype.hello = function() {
    return "I'm " + this.getName() + " from " + this.get<CTRL-SPACE>;
}
Run Code Online (Sandbox Code Playgroud)

并且它只显示getName()getAddress(),无论你在项目中的其他JS对象中如何获得*方法,然后按住Ctrl键单击this.getName()将带您到这个定义的位置,即使您的项目中还有一些其他getName()函数.

HTML

我是否在文件路径中提到自动完成和按住Ctrl键单击,例如<script src ="",<img src =""等?

HTML标记属性中的自动填充.自动填充HTML标记的样式属性,包括属性名称和值.同样在类属性中自动完成.
键入<div class ="<CTRL-SPACE>,它将显示项目中定义的CSS类列表.选择一个,按住Ctrl键单击它,您将被重定向到定义它的位置.

轻松自己的语言高亮

最新版本有语言注入,因此您可以声明自定义JSTL标记通常包含JavaScript,它将突出显示其中的JavaScript.

<ui:obfuscateJavaScript>function something(){...}</ui:obfuscateJavaScript>
Run Code Online (Sandbox Code Playgroud)

在所有项目中进行索引搜索.

您可以使用任何Java类或方法的Find Usages,它将找到它的使用位置,不仅包括Java类,还包括Hibernate,Spring,JSP和其他地方.重命名方法重构不仅在Java类中重命名方法,而且包括注释的任何地方(它不能确定注释中的字符串是否真的是方法名称,因此它会询问).即使存在具有相同名称的另一个类的方法,它也只会找到您的方法.良好的源代码控制集成(SVN是否支持更改列表?IDEA支持每个源代码控制),能够使用您的更改创建修补程序,以便您可以将更改发送给其他团队成员而无需提交.

改进了调试器

当我在调试器的监视窗口中查看HashMap时,我看到逻辑视图 - 键和值,上次我在Eclipse中它显示了带有哈希和下一个字段的条目 - 我不是真的在调试HashMap,我只是想看看它的内容.

Spring和Hibernate配置验证

它在编辑时验证Spring和Hibernate配置,所以我不需要重新启动服务器来知道我拼写错误的类名,或者添加了构造函数参数,因此我的Spring cfg无效.

上次我试过,我无法在Windows XP x64上运行Eclipse.

它会建议你PERSON.NAMEperson.address.按住Ctrl键并单击person.name,它将导航到Person类的getName()方法.

在其中键入Pattern.compile("");put \\,按CTRL-SPACE并查看有关可以将哪些内容放入正则表达式的有用提示.你也可以在这里使用语言注入 - 定义你自己的方法,它接受字符串参数,在IntelliLang选项对话框中声明你的参数是正则表达式 - 它也会在那里给你自动完成.不用说它突出了不正确的正则表达式.

其他特性

我不确定Eclipse中是否存在很少的功能.但至少我们团队中使用Eclipse的每个成员也使用一些合并工具将本地更改与源控件(通常是WinMerge)的更改合并.我从来不需要它 - 在IDEA中合并对我来说已经足够了.通过3次点击,我可以看到源代码管理中的文件版本列表,通过3次点击,我可以比较以前的版本,或者上一个版本和当前版本,并可能合并.

它允许指定我需要WEB-INF\lib文件夹内的所有.jars ,而不单独选择每个文件,所以当有人将新的.jar提交到该文件夹​​时,它会自动选择它.

上面提到的可能是它的10%.我不使用Maven,Flex,Swing,EJB和许多其他东西,所以我不知道它对它们有何帮助.但确实如此.

  • 关于自动完成java代码的两个例子在eclipse中的工作方式相同.有更多rep的人可以删除java示例吗? (26认同)
  • 大多数示例都可以在Eclipse中直接或通过第三方插件获得.我知道没有人在Eclipse中使用外部工具进行svn合并.对于spring/hibernate/javascript编辑器(和自动完成),有第三方插件.至于正则表达式和jsp EL,你打败了我:) (9认同)
  • 对于eclipse调试视图,有一个选项可以显示集合的内容而不是实现细节.对于列表和集合,它将显示其内容.对于地图,它将显示键值对列表.也可以设置自定义显示. (4认同)

ami*_*mit 81

我使用intellij而不是eclipse只有一个原因:可用性

无论是调试,重构,自动完成...... Intellij使用一致的键绑定更容易,在你寻找它们时可用的选项等等.功能方面,intellij很难赶上Eclipse,因为后者有更多的插件可用intellij,并且很容易扩展.

  • 它很聪明,而且很快.这增加了许多可用性功能.遍历子类或实现类,路径查找,查找用法等等都发生得太快了.内联自动完成,只需一个选项卡即可插入.自动完成也很聪明,只是不是纯粹的建议,但IDE会为您考虑名称等. (10认同)
  • @EngineerDollery我不会说它是"错误的",因为amit说"只有一个原因**我**使用intellij而不是eclipse",而不是"只有一个原因****使用intellij而不是eclipse ". (2认同)

Osc*_*Ryz 54

可能不是什么可以/不可以做什么,而是怎么做.

例如,两者都有编辑器,包括用于项目,类路径,输出,结构等的停靠面板.但在Idea中,当我开始自动键入所有这些崩溃时,让我专注于它自己的代码; 在eclipse中,所有这些面板都保持打开,使我的编辑器区域非常小,大约占总可视区域的1/5.因此,我必须抓住鼠标并单击以最小化这些面板.整天这样做是在日食中非常令人沮丧的经历.

与视图输出窗口完全相反的事情发生了.在Idea运行程序时,输出窗口/面板会查看程序的输出,即使它已经过度最小化.在eclipse中我必须再次抓住我的鼠标并查找输出选项卡并单击它以查看我的程序输出,因为输出窗口/面板只是另一个,就像所有其他窗口一样,但在Idea中它被处理一种特殊的方式:"如果用户想要运行他的程序,很可能他想看到该程序的输出!" 我写它时看起来很自然,但eclipse在这个基本的用户界面概念中失败了.

可能在eclipse中有一个快捷方式(编辑时自动隐藏输出窗口并在运行程序时自动显示它),但是作为其他几十个功能,必须在论坛,在线帮助等中搜索快捷方式,而在Idea中更多一点"自然".

这可以重复几乎所有功能,自动完成,自动换行,快速文档视图,一切.我认为用户体验在Idea中比在eclipse中更令人愉快.然后座右铭成真"快乐发展"

Eclipse处理更快的大型项目(+300罐和+4000个类),我认为IntelliJ Idea 8正在研究这个问题.

所有这一切当然都是主观的.我们如何衡量用户体验?

  • 在eclipse中你可以按control-m来编辑窗口的最小/最大,或者双击它的编辑器选项卡 - 这有很大的帮助 (18认同)
  • Ctrl + Shift + L显示当前上下文中可用的热键列表. (7认同)
  • 双击子窗口标题 - 任何子窗口 - 您的子窗口将全屏显示.再做一次恢复.使用控制台最小化面板,然后在输出发生时,控制台立即弹出. (3认同)

kro*_*old 44

Idea 8.0有可爱的ctrl+shift+spacex 2执行以下自动完成:

 City city = customer.<ctrl-shift-space twice>
Run Code Online (Sandbox Code Playgroud)

解决了

 City city = customer.getAddress().getCity();
Run Code Online (Sandbox Code Playgroud)

通过任何级别的getter/setter.

  • 对不起,我认为"很酷"会坚持下去. (50认同)
  • 非常酷,虽然任何超过两个级别的代码气味......;) (27认同)

Dan*_*iuc 33

不要忘记"与剪贴板比较".

我在IntelliJ中一直使用的东西,在Eclipse中没有相应的东西.

  • 此外,剪贴板历史记录. (6认同)
  • 这个功能可以以一个名为[AnyEditTools]的插件的形式添加到eclipse中(http://andrei.gmxhome.de/anyedit/)(在市场上找到) (3认同)

Pau*_*rie 31

IntelliJ中我最喜欢的快捷方式,在Eclipse中没有相同的东西(我发现)被称为"转到符号". CTRL-ALT-SHIFT-N允许您从整个项目开始键入和全局类,方法名,变量名等.

  • eclipse中的ctrl-shift-G (10认同)

pas*_*ssy 27

由于新的Android Studio,我试图切换到IntelliJ.但我现在非常失望.我正在使用Eclipse和Code Recommanders插件.这是一个简单的例子,为什么Eclipse非常棒:

我想创建一个新的SimpleTimeZone.SimpleTimeZone没有没有参数的构造函数.

Ctrl + Space 在Eclipse中

在此输入图像描述

Ctrl + Space 在IntelliJ中

在此输入图像描述

在IntelliJ中,我没有获得任何类型的构造函数的信息SimpleTimeZone.

Enter在Eclipse

在此输入图像描述

我得到之前选择的构造函数填充预定义的变量名称.我可以看到每个论点的类型.使用Code Recommanders Eclipse通过当前作用域中先前定义的变量类型猜测正确的构造函数,并使用这些变量填充构造函数.

Enter在的IntelliJ什么也没有发生.我得到一个空的构造函数.我必须按下Ctrl + P才能看到预期的论点.

在此输入图像描述


oxb*_*kes 25

如果您将光标放在方法上,CTRL+SHIFT+I则会弹出方法实现.如果方法是一种interface方法,那么您可以使用向上和向下箭头循环实现:

Map<String, Integer> m = ...
m.contains|Key("Wibble");
Run Code Online (Sandbox Code Playgroud)

哪里| 是(例如)光标所在的位置.

  • 关键是你实际上并没有导航到实现.它只是显示弹出窗口,就像javadoc等. (8认同)
  • 实际上在Eclipse中(至少是我正在使用的版本),当你把光标放在一个方法的名称上并点击CTRL + T时,你会得到整个层次结构树,从最顶层的界面到叶子实现,并且可以跳转他们中的任何一个. (4认同)
  • 在Eclipse中,您还可以按Ctrl +单击方法名称以跳转到方法定义/实现(取决于上下文) (2认同)

Mo.*_*Mo. 24

IntelliJ有一些非常先进的代码检查(与FindBugs相当但不同).

虽然我在使用IntelliJ时非常想念FindBugs插件(Eclipse/FindBugs集成非常酷).

是IntelliJ支持的CodeInspections的官方列表

编辑:最后,有一个IntelliJ 的findbugs插件.它仍然有点测试,但Code Inspections和FindBugs的结合真是太棒了!

  • 我发现IntelliJ的代码检查发现了更多错误,有很多有用的快速修复,它可以在您键入时提供警告和修复行.(您不必保存文件,也不必编译)这些细节使得尽快修复错误变得更加实用. (8认同)

小智 16

远,远,更多的重构.


小智 15

我经常使用的一件事是设置一个断点,然后控制它的作用.(在我上一份工作中,大多数人都使用Eclipse ...我记得很惊讶没有人能在Eclipse中找到如何做到这一点.)

例如,可以让断点实际上不会停止,而只是将消息记录到控制台.这意味着,我不必使用"System.out.println(...)"丢弃我的代码,然后重新编译.

  • 现在在eclipse中找到它更简单 - 它现在在断点视图中显示条件(所以你知道它们是可用的).你可以打破计数,输入任意代码,比如`System.out.println("here"); false`打印但不打破(最后一个语句是一个布尔表达式,用于确定是否应该打破) (3认同)
  • 你可以在eclipse中使用条件断点来做到这一点,但它有点厚颜无耻.例如.真正 (2认同)

小智 15

有许多想法以更简单的方式解决,或者没有相应的东西:

  • 自动完成操作:ctrl+shift+a您可以通过键盘调用任何创意操作而无需记住其组合键...想想在Windows中的gnome-do或launchy,您就有了这个想法!此外,此功能支持CamelCasing缩写;)

  • 搁架:让您轻松分开一些代码,然后通过差异查看器查看它们.

  • 本地历史:它管理得更好,更简单.

  • SVN注释和历史:更易于检查,您也可以轻松地查看整个源文件的这一部分的历史记录.

  • 自动完成无处不在,例如评估表达式和断点条件窗口.

  • Maven集成......更简单,更简单,集成度更高.

  • 重构更接近手,例如循环插入,包装/转换,重命名和添加变量.

  • 找到强大有序的组织.即使是大项目

  • 同时与一个大项目的几个分支一起工作非常稳定(作为分支源的1.5Gb的前错误修正器,并且需要同时处理它们,想法显示其坚如磐石的能力)

  • 更清洁,更简单的界面......

  • 而且,只使用键盘更简单,不再需要使用鼠标来实现大量简单的操作,节省您的时间并让您更专注于代码......重要的地方!

而现在,作为开源...... Idea用户群将呈指数级增长.

  • 自动完成操作=在eclipse中快速访问; 我不知道当地历史如何比日食更容易...... (2认同)

Dar*_*ron 14

结构搜索和替换.

例如,搜索以下内容:

  System.out.println($string$ + $expr$);
Run Code Online (Sandbox Code Playgroud)

其中$ string $是文字,$ expr $是my.package.and.Class类型的表达式,然后替换为:

  $expr$.inspect($string$);
Run Code Online (Sandbox Code Playgroud)


小智 13

就这个帖子而言,我的时间可能有些偏差,但我只需回应.

我是一个巨大的日食爱好者 - 使用它,因为它是第一次出现.一位朋友(10年前)告诉我,这将是一名球员.他是对的.

然而!我刚刚开始使用IntelliJ,如果你还没有看到或使用过变更列表 - 你就错过了编程天堂.

跟踪我更改的文件的能力(在我的开发分支ala clearcase上)是我在eclipse的插件中寻找的东西.Intellij跟踪单个提交的所有更改,非常简单.您可以使用自定义列表隔离更改的文件.我将它用于本地必须唯一的配置文件,但在我同步或与存储库进行比较时会不断标记 - 在变更列表下列出它们,我可以监视它们,但是整齐地将它们收起来让我可以专注于真正的添加我正在做.

此外,还有一个Commit Log插件,可以为那些未与您的错误跟踪软件集成的SCCS输出所有更改的文本.将日志粘贴到故障单的工作历史记录中可捕获文件,其版本,日期/时间以及分支/标记.地狱很酷.

所有这些都可以通过eclipse中的插件(或未来的增强功能)来支持,我打赌; 然而,Intellij让这变得轻而易举.

最后,我对这款产品的主流热爱感到非常兴奋 - 按键,所以这很痛苦,但很有趣.


Mo.*_*Mo. 12

IntelliJ调试器有一个非常方便的功能叫做"评估表达式",远远比日食挂件好.它有完整的代码完成,我认为它通常"更有用".

  • Eclipse还有一个表达式求值程序,它提供代码完成功能.转到窗口 - >显示视图 - >调试 - >显示当在调试器中的断点处停止时,您可以评估该显示视图中的任意表达式. (8认同)

Chr*_*sel 11

嗯,对我来说这是一千个小事.一些宏,一般在Eclipse中的GUI布局我觉得很糟糕.我无法在Eclipse中的不同窗口中打开多个项目.我可以打开多个项目,但是当我切换文件时,基于视图的系统会在我身上交换一堆东西.IntelliJ的代码检查似乎更好.它的弹出助手来解决常见问题很好.很多简单易用的东西,比如我可以悬停在热点上的侧栏,它会告诉我每个实现的方法的子类或我正在实现的方法以及从哪里开始.

每当我不得不使用或者看到有人使用Eclipse时,似乎他们可以完成我在IntelliJ中可以做的大部分事情,但是它需要更长时间并且它更笨拙.


rlo*_*ang 9

介绍变量.(Ctrl+Alt+V在Windows上,Cmd+Alt+V在OSX上)

假设你调用一个方法,service.listAllPersons() Hit Ctrl+Alt+VEnter,并且插入了来自方法调用的返回值的变量:

List<Person> list = service.listAllPersons();
Run Code Online (Sandbox Code Playgroud)

保存您的输入,您不必检查您正在调用的方法的返回类型.使用泛型时特别有用,例如

new ArrayList<String>()
Run Code Online (Sandbox Code Playgroud)

[引入变量]

ArrayList<String> stringArrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

(当然你可以在点击之前轻松更改变量的名称Enter)

  • 这是Eclipse中的Ctrl + 2 L. (13认同)
  • 很长一段时间......如果你使用quickfix,`control + 1`(世界上最明显的键绑定,嗯?),它建议你可以在当前光标位置做的事情,类似于IDEA中的意图.例如,它列出"分配本地","分配字段"和其他选项.`control + 2,L`是它的捷径. (3认同)
  • 很好,我不知道,也没有任何我问过的Eclipse用户.这个功能是否已成为Eclipse的一部分很长一段时间了? (2认同)

kro*_*old 8

IntelliJ具有从代码到jspx文档的智能感知和重构支持.

  • 他的意思是,如果您有一个引用POJO上的属性的JSP,并且您重命名该属性,那么您的JSP将正确更新.IntelliJ的JSP支持踢Eclipse/WTP! (3认同)
  • 我无法让Eclipse的自动完成工作在JSP EL表达式中.JSP或JSPX,没关系,它只是无能为力.IntelliJ正如您所期望的那样处理tagx和jspx:像标记或jsp文件. (2认同)

mdm*_*dma 7

For me, it's IDEA's maven support, especially in version 9 is second to none. The on-the-fly synchronizing of the project to the maven model is just fantastic and makes development pleasant.


小智 6

Intellij有一个比Subversive或Subclipse更优越的SVN插件,它的工作原理!我们浪费了使用Eclipse合并源文件的时间并没有考虑到.这不是IntelliJ的问题,因为该插件可以为您提供更多帮助.

Subclipse插件也是不可靠的 - 我们经常有这样的实例:插件不认为其他开发人员已经检查过任何代码到SVN,但是有 - CI服务器已处理它们!