在IntelliJ中可能在Eclipse中不可能的东西?
我曾经听过那些转过头来,谁发誓的人。
作为一个巨大的Eclipse粉丝,但没有时间去尝试IntelliJ,我有兴趣从IntelliJ的用户那里听到一些“ex-Eclipsians”,你可以用IntelliJ做一些你不能用Eclipse做的具体的事情。
注 :这不是一个主观的问题,根本不是要变成IDE的圣战。 请downvote任何flamebait答案 。
按住CTRL键点击任何地方
CTRL-单击,它使您可以在任何地方定义单击的对象 – 不仅在Java代码中的Java类和variables中,而且在Springconfiguration中(您可以单击类名称,属性或bean名称),在Hibernate中可以单击属性名称或类,或者包含的资源),可以在Java类中单击一次即可导航到Spring或Hibernate bean; 点击包含的JSP或JSTL标签也可以工作,按住ctrl键点击JavaScriptvariables或者函数会带你到它定义的地方,或者如果有多个地方显示菜单,包括其他.js文件和JS代码文件。
自动填充许多languagues
过冬
在Springconfiguration中,在HSQLexpression式,Hibernateconfiguration(包括类,属性和数据库列名)中自动完成
<property name="propName" ref="<hit CTRL-SPACE>"
它会显示你可以注入该属性的那些bean的列表。
Java的
Java代码中非常智能的自动完成:
interface Person { String getName(); String getAddress(); int getAge(); } //--- Person p; String name = p.<CTRL-SHIFT-SPACE>
它只显示你的getName() , getAddress()和toString() (只有他们是兼容的types)和getName()是第一个在列表中,因为它有更多的相关名称。 仍然在EAP中的最新版本8具有更智能的自动完成function。
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>
它会默默地自动完成它
Country c = p.getAddress().getCountry();
使用Javascript
JavaScript中的智能自动完成function
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>; }
它只显示getName()和getAddress() ,不pipe你的项目中的其他JS对象有多less*方法,并且按住Ctrl键点击this.getName()会带你到这个被定义的地方,即使在你的项目中还有一些其他的getName()函数。
HTML
我提到了自动完成和Ctrl-点击文件的path,如<script src =“”,<img src =“”等?
自动完成HTML标签属性。 自动完成HTML标签的样式属性,属性名称和值。 自动完成类的属性。
键入<div class =“<CTRL-SPACE>,它会显示你在你的项目中定义的CSS类列表。select一个,按住Ctrl键并点击它,你将被redirect到它定义的位置。
易于自己的语言higlighting
最新版本有语言注入,所以你可以声明你自定义的JSTL标签通常包含JavaScript,并且会突出显示它里面的JavaScript。
<ui:obfuscateJavaScript>function something(){...}</ui:obfuscateJavaScript>
索引search所有项目。
您可以使用任何Java类或方法的查找用法,它将查找它的使用位置,不仅包括Java类,还包括Hibernate,Spring,JSP和其他地方。 重命名方法重构不仅可以在Java类中重命名方法,而且可以在包括注释的任何地方重命名(不能确定注释中的string是否真的是方法名称,因此它会询问)。 即使有另一个同名类的方法,它也会find你的方法。 良好的源代码控制集成(SVN支持更改列表吗?IDEA支持他们的每个源代码控制),能够创build一个修改与您所做的更改,以便您可以发送您的更改其他团队成员而不承诺。
改进的debugging器
当我在debugging器的监视窗口中查看HashMap时,我看到了逻辑视图 – 键和值,上次我在Eclipse中做了这个操作,它显示了带有哈希和下一个字段的条目 – 我没有真正debuggingHashMap ,我只想看看它的内容。
Spring&Hibernateconfigurationvalidation
它在编辑时validation了Spring和Hibernate的configuration,所以我不需要重新启动服务器来知道我拼错了类名,或者添加了构造参数,所以我的Spring的cfg是无效的。
上次我尝试了,我无法在Windows XP x64上运行Eclipse。
它会build议你person.name或person.address 。 按住Ctrl键点击person.name ,它将导航到Person类的getName()方法。
typesPattern.compile("");
把\\在那里,按CTRL-SPACE,看看你可以把你的正则expression式的有用的提示。 你也可以在这里使用语言注入 – 定义你自己的方法,接受string参数,在IntelliLang选项对话框中声明你的参数是正则expression式 – 它也会给你自动完成。 不用说,它突出了不正确的正则expression式。
其他特性
Eclipse中有几个function我不确定是否存在。 但至less我们团队中每个使用Eclipse的成员都使用一些合并工具将本地更改与源代码pipe理(通常为WinMerge)的更改合并在一起。 我从来不需要它 – 在IDEA中融合对我来说已经足够了。 通过3次点击,我可以看到在源代码pipe理中的文件版本的列表,我可以比较以前的版本,或以前和现在的一个可能合并3多点击。
它允许指定我需要WEB-INF\lib
文件夹中的所有.jar文件,而不需要单独select每个文件,所以当有人提交新的.jar文件到文件夹时,它会自动选取。
上面提到的可能是它的10%。 我不使用Maven,Flex,Swing,EJB和许多其他的东西,所以我不能告诉他们如何帮助他们。 但它确实如此。
只有一个原因我使用intellij而不是eclipse: 可用性
无论是debugging,重构,自动完成.. Intellij使用一致的键绑定,可用的选项,更容易使用,你可以find他们等等。function方面,intellij赶上Eclipse会很困难,因为后者有更多可用的intellij插件,并且易于扩展。
可能不是什么可以/不可以做的事情,而是如何做。
比如两个编辑器都围绕着项目,类path,输出,结构等的停靠面板。但是在Idea中,当我开始自动input所有这些崩溃时,让我把注意力集中在自己的代码上; 在eclipse中,所有这些面板保持打开状态,使我的编辑区域缩小了大约1/5的可视区域。 所以我必须抓住鼠标,然后单击以在这些面板中最小化。 整天这样做是一次非常令人沮丧的日食经验。
与视图输出窗口完全相反的事情发生。 在Idea中,运行一个程序会使输出窗口/面板看到程序的输出,即使它已经被最小化了。 在Eclipse中,我必须再次抓住我的鼠标,然后查找输出选项卡,然后单击它来查看我的程序输出,因为输出窗口/面板只是另一个窗口,就像其余的窗口一样,但是在Idea中它被处理一个特别的方法是:“如果用户想要运行他的程序,很可能他希望看到该程序的输出!” 我写这个看起来很自然,但是eclipse在这个基本的用户界面概念上失败了。
在eclipse中可能有一个快捷方式(自动隐藏输出窗口,在运行程序时进行编辑和自动显示),但是作为其他几十个function,快捷方式必须在论坛,在线帮助中被捕获,而在Idea中更多的是“自然”。
这可以重复几乎所有的function,自动完成,文字换行,快速文档视图,一切。 我认为Idea的用户体验比Eclipse更令人愉快。 那么座右铭就会成为“快乐发展”
Eclipse处理速度更快的大项目(+300jar和+4000class),我认为IntelliJ Idea 8正在开发这个项目。
这一切当然是主观的。 我们如何衡量用户体验?
想法8.0有可爱的Ctrl + Shift +空间 x 2,做以下自动完成:
City city = customer.<ctrl-shift-space twice>
解决
City city = customer.getAddress().getCity();
通过任何级别的getters / setter。
不要忘记“与剪贴板比较”。
IntelliJ中一直使用的东西,在Eclipse中没有相应的东西。
在IntelliJ中,我最喜欢的Eclipse中没有相应的快捷方式(我发现)被称为“Go to symbol”。 CTRL-ALT-SHIFT-N允许你从整个项目中开始键入和遍历类,方法名,variables名等。
由于新的Android Studio,我试图切换到IntelliJ。 但是现在我很失望 我使用Code Recommanders插件的Eclipse。 这里是一个简单的例子,为什么Eclipse是如此的真棒:
我想创build一个新的SimpleTimeZone
。 SimpleTimeZone
没有带有零参数的构造函数。
Eclipse中的Ctrl +空格
在IntelliJ中Ctrl +空格
在IntelliJ中我没有得到什么types的构造函数SimpleTimeZone
。
在Eclipse中input后
我得到以前select的构造函数填充预定义的variables名称。 我可以看到每个参数的types。 通过代码推荐器,Eclipse根据当前作用域中以前定义的variablestypes猜测正确的构造函数,并用这些variables填充构造函数。
在IntelliJ input后没有任何反应。 我得到一个空的构造函数。 我必须按Ctrl + P来查看预期的参数。
如果你有一个方法的光标,然后CTRL + SHIFT +我会popup的方法实现。 如果这个方法是一个interface
方法,那么你可以使用向上和向下箭头循环遍历实现:
Map<String, Integer> m = ... m.contains|Key("Wibble");
哪里| 是(例如)你的光标在哪里。
IntelliJ有一些相当先进的代码检查(可比较,但不同于FindBugs)。
尽pipe我在使用IntelliJ时严重遗漏了FindBugs插件(Eclipse / FindBugs集成非常酷)。
这里是IntelliJ支持的CodeInspections的正式列表
编辑:最后,有一个IntelliJ的findbugs插件 。 它仍然是一个testing版,但代码检查和FindBugs的组合只是真棒!
远远更重构。
我经常使用的一件事是设置一个断点,然后控制它的function。 (在我上一份工作中,大多数人都使用Eclipse …我记得很惊讶,没有人能够在Eclipse中find如何做到这一点。)
例如,可以有断点不实际停止,但只是将消息logging到控制台。 这意味着,我不必乱丢我的代码“System.out.println(…)”,然后重新编译。
这个想法用很简单的方法解决了很多事情,或者没有相同的东西:
-
自动完成操作:按Ctrl + Shift + a,你可以调用键盘上的任何想法动作,而不用记住它的组合键。想想在windows中的gnome-do或launchy,你就知道了! 另外,这个特性支持CamelCasing的缩写;)
-
书架:让您可以轻松地保留一些代码,然后通过差异查看器查看它们。
-
当地历史:pipe理得更好,更简单。
-
SVN注释和历史:更简单的检查,也可以很容易地看到只有整个源文件的这一部分的历史。
-
自动完成到处,比如评估expression式和断点条件窗口。
-
Maven集成…非常简单,并且很好地集成。
-
重构更接近手,如循环插入,包装/铸造,重命名和添加variables。
-
find很强大,组织良好。 即使在大项目
-
在一个大项目的几个分支同时工作的稳定性很好(作为分支来源的1.5Gb的前bug修复工具,并且需要同时工作,理念显示出其坚如磐石的能力)
-
更清洁,更简单的界面…
-
而且,使用键盘更简单,只需要使用鼠标就可以完成很多简单的操作,节省了时间,让您更专注于代码…重要的地方!
而现在,正在开源…… Idea用户群将成倍增长。
结构search和replace。
例如,search如下所示的内容:
System.out.println($string$ + $expr$);
其中$ string $是文字,$ expr $是types为my.package.and.Class的expression式,然后replace为:
$expr$.inspect($string$);
我的时间可能会稍微偏离这个线程,但我只是不得不回应。
我是一个巨大的eclipse粉丝 – 自从它第一次出现以来就使用它。 一个朋友当时(十多年前)告诉我,这将是一个球员。 他是对的。
然而! 我刚刚开始使用IntelliJ,如果你没有看到或使用变更列表 – 你错过了编程的天堂。
追踪我更改的文件(在我的开发分支ala clearcase)的能力是我在寻找一个插件日食。 Intellij跟踪您的所有更改为一个单一的提交,非常容易。 您可以用自定义列表隔离已更改的文件。 我使用的是那些必须是本地唯一的configuration文件,但是当我与存储库同步或比较时,它们会不断被标记 – 将它们列在更改列表下,我可以监视它们,但将它们整齐地放在一起,这样我就可以专注于实际添加我正在做。
此外,还有一个提交日志插件,可以输出所有未与错误跟踪软件集成的SCCS的更改文本。 将日志粘贴到工单的工作历史logging中可捕获文件,版本,date/时间以及分支/标签。 这真酷。
所有这些都可以通过eclipse中的插件(或者将来的增强)来支持,我打赌; 然而,Intellij使这一切变得轻而易举。
最后,我对这款产品的主stream爱情 – 击键感到兴奋,所以这很痛苦,但很有趣。
IntelliJdebugging器有一个非常方便的function,称为“评估expression”,这是远远优于日食吊坠。 它有完整的代码完成,我concider它通常是“更有用的”。
那么,对我来说,这是一个小小的东西。 一些macros,一般在Eclipse中的GUI布局,我觉得很糟糕。 我无法在Eclipse中的不同窗口中打开多个项目。 我可以打开多个项目,但当我切换文件时,基于视图的系统会交换一些东西。 IntelliJ的代码检查看起来更好。 其popup帮助器来解决常见问题是很好的。 很多简单易用的东西,比如我可以在一个热点上hover的侧栏,它会告诉我一个方法的实现子类或我正在实现的方法。
每当我不得不使用Eclipse或者看别人使用Eclipse时,似乎他们可以在IntelliJ中完成大部分的工作,但是这需要花费更长的时间,而且更加笨拙。
引入variables。 (在Windows上为Ctrl + Alt + V ,在OSX上为Cmd + Alt + V )
比方说,你调用一个方法, service.listAllPersons()
按Ctrl + Alt + V和Enter ,并从方法调用返回值的variables插入:
List<Person> list = service.listAllPersons();
保存你input的内容,而不必检查你正在调用的方法的返回types。 使用generics特别有用,例如
new ArrayList<String>()
[引入variables]
ArrayList<String> stringArrayList = new ArrayList<String>();
(当然你可以很容易的改变variables的名字,然后按Enter键 )
IntelliJ具有智能感知和从代码到jspx文档的重构支持。
对我来说,这是IDEA的maven支持,尤其是在版本9中是首屈一指的。 这个项目与Maven模型的即时同步非常棒,让开发变得愉快。
Intellij拥有比Subversive或Subclipse更优越的SVN插件,它的工作原理! 我们浪费时间来合并使用Eclipse的源文件并不值得考虑。 这不是IntelliJ的问题,因为插件可以帮助你更多。
另外Subclipse插件是不可靠的 – 我们经常会遇到插件不认为其他开发者已经检查过SVN代码的情况,但是CI服务器已经处理了它们!
VIM模拟器。 这个插件在IDEA中编辑文件时提供了几乎完整的vi / vim / gvim仿真。 支持以下function:
- 运动键
- 删除/更改
- 插入模式命令
- 分数
- 寄存器
- VIM撤销/重做
- 可视模式命令
- 一些Ex命令
- 一些:设置选项
- 完整的VIM正则expression式用于search和search/replace
- macros
- Diagraphs
- 命令行历史
- search历史logging
- 跳转列表
- VIM的帮助
关于这个插件来自http://plugins.jetbrains.net/plugin/?id=164的一些评论;
我看不出任何其他的IDE,因为这个插件..这两个世界的最佳…真棒! 这就是我在所有IDE中缺乏的东西。
我认为其中一个优点是依赖结构matrix : http : //www.jetbrains.com/idea/features/dependency_analysis.html#link0
在Lattix的网站(独立产品)中有一个很好的DSM使用和好处的介绍: http : //www.lattix.com/files/dl/slides/s.php? directory=4tour
其他一些事情:
- 在更改方法签名时传播参数/exception,对于更新调用堆栈内部的方法非常方便
- 在string中的SQL代码validation作为parameter passing给jdbc调用(以及整个新捆绑的语言注入)
- (或其方法)和智能实现导航(Ctrl + Alt + Click或Ctrl + Alt + B)
- 在EJB 2.1接口和bean类之间进行链接(包括重构支持); 旧的,但在旧项目上工作仍然非常有价值
IntelliJ做的两件事,Eclipse对我来说不是很有价值:
方法分隔符:方法之间的灰色线使得代码更具可读性
文本消除锯齿:在IDE中使代码看起来非常好
一个非常有用的function是部分构buildMaven反应器项目的能力,以便只包含所需的部分。
为了使这个更清楚些,考虑使用覆盖技术在他们之间共享大量公共资源(例如JavaScript,Springconfiguration文件等)的WAR文件集合的情况。 如果你正在使用一些网页(在Jetty中运行)并且想要改变一个独立模块中的一些覆盖代码,那么你通常会停止使用Jetty,运行Maven构build,再次启动Jetty,继续。 Eclipse就是这种情况,几乎和我一起工作的其他IDE都是这样。 在IntelliJ中不是这样。 使用项目设置,您可以定义您希望将哪个模块包含在后台构build中。 因此,你最终会看到一个无缝的过程。 You make a change to pretty much any code in the project and instantly it is available after you refresh the browser.
Very neat, and very fast.
I couldn't imagine coding a front end in something like YUI backing onto DWR/SpringMVC without it.
Preamble to my answer: My use of Eclipse is limited. We needed a Java IDE to work on both Windows and Mac and the Mac port slowed down day by day. This was years ago and I'm sure it's OK now. But that is what got us to switch to IntelliJ and we've been happy with it.
Now for my answer: One big difference I haven't seen mentioned yet is that tech support is better with IntelliJ/Jet Brains. We send an e-mail to JetBrains and get a definitive answer back in less than an hour. Looking for answers to Eclipse problems results in the usual, "You stupid idiot" answers (usually a small number of the replies) along with the much larger number of insightful, helpful replies. But it takes some sorting through to get the real answer.
Something which I use in IntelliJ all the time is refactoring as I type. I have re-written classes from a printout (originally written in eclipse) using both IDEs and I used about 40% less key strokes/mouse clicks to write the same classes in IntelliJ than eclipse.
I wouldn't want to use Eclipse until they support as much refactoring with incomplete pieces of code.
Here is a longer list of features in IntelliJ 8.0/8.1 [ http://www.jetbrains.com/idea/features/index.html%5D
There is one thing that IntelliJ does much much better than Eclipse and that is empty your pockets!
I do however prefer using it and one big advantage it has over Eclipce is the way it synchronises with the file system, for big projects and slow computers (yes in work environments the PC's are a lot slower than our ones at home) Eclipse seems to struggle where IntelliJ seems to be quicker albeit with a slower initial indexing time.
IntelliJ Community edition obviously makes using it free but you soon want those extra refactoring and nice little goodies not included in the CC edition.
In my opinion, its generally a better user experience but whether its worth the cost is a question for each developer to answer themselves.
But lets be grateful we have up to three great IDEs for Java right now with NetBeans getting better all the time.
Data flow analysis : inter-procedural backward flow analysis and forward flow analysis, as described here . My experiences are based on Community Edition, which does data flow analysis fairly well. It has failed (refused to do anything) in few cases when code is very complex.
First of all I love intellij. There are at least a hundred features it has that eclipse lack. I'm talking magnitudes better in reliability and intelligence that no hyperbole can describe when it comes to refactoring, renaming, moving and others which have already been mentioned.
BUT, there is one thing that intellij does not allow which eclipse does. It does not allow running multiple projects at once under the same vm.
When you have separate projects for the front, middle, core, agents..etc, where they all have to interact with each other, you can not quickly modify and debug at the same time, afaik. The only way I current cope with this is to use ant scripts to deploy and update jars in dependent projects, or use maven.
Eclipse allows multiple projects to be debugged under one ide vm instance.