Что возможно в IntelliJ, что невозможно в Eclipse?

Я слышал от людей, которые переключались в любом случае и кто клялся тем или другим.

Будучи огромным поклонником Eclipse, но не успел опробовать IntelliJ, мне интересно услышать от пользователей IntelliJ, которые являются "ex-Eclipsians", некоторые специфические вещи, которые вы можете сделать с IntelliJ, что вы не можете сделать с Eclipse.

Примечание. Это не субъективный вопрос и вовсе не означает превратиться в святую войну IDE. Пожалуйста, уменьшите любые ответы пламени..

Ответ 1

CTRL-click работает в любом месте

CTRL-щелчок, который приводит вас к тому, что объект щелчка определяется везде, - не только в Java-классах и переменных в коде Java, но и в конфигурации Spring (вы можете щелкнуть по имени класса или свойству или bean имя), в Hibernate (вы можете щелкнуть имя или класс свойства или включить ресурс), вы можете перемещаться в один клик из класса Java, где он используется как Spring или Hibernate bean; нажатие на включенное JSP или JSTL-тег также работает, ctrl-click на переменной JavaScript или функции приводит вас к тому месту, где оно определено, или отображает меню, если есть несколько мест, включая другие .js файлы и JS-код в HTML или JSP файлы.

Автозаполнение для многих языков

Hibernate

Автозаполнение в выражениях HSQL в конфигурации Hibernate (включая имена классов, свойств и столбцов базы данных) в конфигурации Spring

<property name="propName" ref="<hit CTRL-SPACE>"

и он покажет вам список тех beans, которые вы можете ввести в это свойство.

Java

Очень умный автозаполнение в Java-коде:

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

и он показывает вам ТОЛЬКО getName(), getAddress() и toString() (только они совместимы по типу), а getName() является первым в списке, потому что он имеет более релевантное имя. Последняя версия 8, которая все еще находится в EAP, обладает еще более умным автозаполнением.

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 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(), независимо от того, как могут получить * методы, которые у вас есть в других объектах JS в вашем проекте, и ctrl-click на this.getName() приводит вас туда, где это определено, даже если в вашем проекте есть другие функции getName().

HTML

Я упомянул автозаполнение и ctrl-щелчок в пути к файлам, например < script src= ", < img src=" " и т.д.

Автозаполнение атрибутов тега HTML. Автозаполнение атрибута стиля тегов HTML, как имен атрибутов, так и значений. Автозаполнение в атрибутах класса.
Type < div class= "< CTRL-SPACE > , и он отобразит список классов CSS, определенных в вашем проекте. Выберите один из них, нажмите Ctrl-клик по нему, и вы будете перенаправлены туда, где он определен.

Простой собственный язык

В последней версии есть языковая инъекция, поэтому вы можете объявить, что пользовательский тег JSTL обычно содержит JavaScript, и он будет выделять JavaScript внутри него.

<ui:obfuscateJavaScript>function something(){...}</ui:obfuscateJavaScript>

Индексированный поиск по всему проекту.

Вы можете использовать Поиск использования любого Java-класса или метода, и он найдет, где он используется, включая не только классы Java, но и Hibernate, Spring, JSP и другие места. Переименовать метод рефакторинга переименовывает метод не только в Java-классах, но и в любом месте, включая комментарии (он не может быть уверен, что строка в комментариях действительно является именем метода, поэтому он будет запрашивать). И он найдет только ваш метод, даже если есть методы другого класса с тем же именем. Хорошая интеграция управления версиями (поддерживает ли SVN списки изменений? IDEA поддерживает их для каждого источника управления), возможность создания патча с вашими изменениями, чтобы вы могли отправлять свои изменения другому члену команды, не совершая их.

Улучшенный отладчик

Когда я смотрю на HashMap в окне просмотра отладчика, я вижу логический вид - ключи и значения, в прошлый раз, когда я делал это в Eclipse, он показывал записи с хэшем и следующими полями - я действительно не отлаживаю HashMap, я просто хочу посмотреть его содержимое.

Spring и проверка конфигурации Hibernate

Он проверяет правильность конфигурации Spring и Hibernate, когда вы его редактируете, поэтому мне не нужно перезапускать сервер, чтобы знать, что я назвал неправильное имя или добавлен параметр конструктора, поэтому мой Spring cfg недействителен.

В прошлый раз, когда я попытался, я не смог запустить Eclipse в Windows XP x64.

и он предложит вам person.name или person.address. Ctrl-click на person.name, и он будет перемещаться к вам методом getName() класса Person.

Введите Pattern.compile(""); поставьте\\там, нажмите CTRL-SPACE и посмотрите полезный намек на то, что вы можете добавить в свое регулярное выражение. Вы также можете использовать языковой инкремент здесь - определите свой собственный метод, который принимает параметр string, объявите в диалоге параметров IntelliLang, что ваш параметр является регулярным выражением, - и он также даст вам автозаполнение. Излишне говорить, что он выделяет неправильные регулярные выражения.

Другие функции

Есть несколько функций, которые я не уверен, присутствуют в Eclipse или нет. Но по крайней мере каждый член нашей команды, который использует Eclipse, также использует некоторый инструмент слияния, чтобы объединить локальные изменения с изменениями из исходного элемента управления, обычно WinMerge. Мне это не нужно - для меня достаточно слияния в IDEA. Через 3 клика я вижу список версий файлов в исходном элементе управления, еще на 3 клика я могу сравнить предыдущие версии или предыдущие и текущие и, возможно, слить.

Это позволяет указать, что мне нужно все .jars внутри папки WEB-INF\lib, не выделяя каждый файл отдельно, поэтому, когда кто-то совершает новый .jar в эту папку, он автоматически выбирает его.

Упомянутое выше, вероятно, составляет 10% от того, что он делает. Я не использую Maven, Flex, Swing, EJB и многие другие вещи, поэтому я не могу сказать, как это помогает с ними. Но это так.

Ответ 2

Есть только одна причина, по которой я использую intellij, а не eclipse: удобство использования

Будет ли это отладка, рефакторинг, автозаполнение. Intellij намного проще в использовании с постоянными привязками клавиш, доступными параметрами, где вы их ищете. По-видимому, для Intellij будет сложно догнать Eclipse, так как у последнего есть гораздо больше плагинов, доступных intellij и легко расширяемых.

Ответ 3

Вероятно, это не вопрос того, что может/не может быть выполнено, но как.

Например, у обоих есть редактор, окруженный панелями док-станции для проекта, classpath, output, structure и т.д. Но в Idea, когда я начинаю вводить все эти коллапсы, автоматически позволяю мне сосредоточиться на коде, который сам; В eclipse все эти панели остаются открытыми, оставляя область редактора очень уменьшенной, около 1/5 общей видимой области. Поэтому я должен захватить мышь и щелкнуть, чтобы свести к минимуму в этих панелях. Выполнение этого в течение всего дня - очень неприятный опыт в затмении.

То же самое происходит с окном вывода представления. В программе "Идея" программа выводит окно/панель вывода, чтобы увидеть выход программы, даже если она была сведена к минимуму. В eclipse мне нужно снова схватить мою мышь и найти вкладку вывода и щелкнуть ее, чтобы просмотреть выход моей программы, потому что выходное окно/панель - это просто еще один, как и все остальные окна, но в Idea он обрабатывается в особым образом: "Если пользователь хочет запустить свою программу, очень вероятно, что он хочет видеть выход этой программы!" Кажется настолько естественным, когда я пишу его, но eclipse терпит неудачу в этой концепции базового интерфейса пользователя.

Наверное, есть ярлык для этого в eclipse (автовыполнение окна вывода при редактировании и автошоу при запуске программы), но, как и некоторые другие десятки функций, на ярлык нужно охотиться на форумах, онлайн-справку и т.д., в то время как в Idea немного бит более "естественный".

Это можно повторить почти для всех функций, имеющих как автозаполнение, перенос слов, так и быстрый просмотр документации, все. Я думаю, что опыт пользователя намного приятнее в Idea, чем в eclipse. Затем появляется девиз "Развивайте с удовольствием"

Eclipse обрабатывает более быстрые проекты (+300 банок и +4000 классов), и я думаю, что IntelliJ Idea 8 работает над этим.

Все это, конечно, субъективно. Как мы можем измерить работу пользователя?

Ответ 4

Идея 8.0 имеет прекрасный ctrl+shift+space x 2, который выполняет следующий автозаполнение:

 City city = customer.<ctrl-shift-space twice>

разрешает

 City city = customer.getAddress().getCity();

через любое количество уровней геттеров/сеттеров.

Ответ 5

Не забудьте "сравнить с буфером обмена".

Что-то, что я использую все время в IntelliJ и которое не имеет эквивалента в Eclipse.

Ответ 6

Мой любимый ярлык в IntelliJ, который не имеет эквивалента в Eclipse (который я нашел), называется "Перейти к символу". CTRL-ALT-SHIFT-N позволяет начинать вводить и перебирать классы, имена методов, имена переменных и т.д. из всего проекта.

Ответ 7

Я попытался переключиться на IntelliJ из-за новой Android Studio. Но сейчас я очень разочарован. Я использую Eclipse с плагином Code Recommendedanders. Вот простой пример, почему Eclipse настолько замечателен:

Я хочу создать новый SimpleTimeZone. SimpleTimeZone не имеет конструктора с нулевыми аргументами.

Ctrl + Space в Eclipse

enter image description here

Ctrl + Space в IntelliJ

enter image description here

В IntelliJ я не получаю никаких сведений о конструкторах SimpleTimeZone.

После Enter в Eclipse

enter image description here

Я получаю ранее выбранный конструктор, заполненный предопределенными именами переменных. И я вижу тип каждого аргумента. С помощью Code Recommendanders Eclipse угадывает правильный конструктор по ранее определенным типам переменных в текущей области и заполняет конструктор этими vars.

После Enter в IntelliJ ничего не происходит. Я получаю пустой конструктор. Я должен нажать Ctrl + P, чтобы увидеть ожидаемые аргументы.

enter image description here

Ответ 8

Если у вас есть курсор на методе, тогда CTRL+SHIFT+I выведет реализацию метода. Если метод является методом interface, то вы можете использовать стрелки вверх и вниз для циклического выполнения реализаций:

Map<String, Integer> m = ...
m.contains|Key("Wibble");

Где | (например), где находится ваш курсор.

Ответ 9

IntelliJ имеет некоторые довольно продвинутые проверки кода (сопоставимые, но отличные от FindBugs).

Хотя я серьезно пропустил плагин FindBugs при использовании IntelliJ (интеграция Eclipse/FindBugs довольно крутая).

Здесь - официальный список CodeInspections, поддерживаемый IntelliJ

EDIT: Наконец, для IntelliJ есть findbugs-plugin. Это все еще немного бета, но комбинация Code Inspections и FindBugs просто потрясающая!

Ответ 10

Далеко, гораздо больше рефакторинга.

Ответ 11

Одна вещь, которую я использую регулярно, - это установить точку останова, но затем контролировать, что она делает. (На моей последней работе большинство остальных использовали Eclipse... Я помню, что я был удивлен, что никто не мог найти, как это сделать в Eclipse.)

Например, точка останова на самом деле не остановится, а просто зарегистрирует сообщение на консоли. Это означает, что мне не нужно мутировать мой код с помощью "System.out.println(...)", а затем перекомпилировать.

Ответ 12

Есть много вещей, которые идея решает гораздо проще, или нет эквивалента:

  • Действия автозаполнения. Выполняя ctrl+shift+a, вы можете вызвать любое действие с клавиатуры, не помня его комбинацию клавиш... Подумайте о gnome-do или запустите в Windows, и у вас есть идея! Кроме того, эта функция поддерживает аббревиатуры CamelCasing;)

  • Полка: позволяет вам легко разделить фрагменты кода, а затем просмотреть их через средство просмотра различий.

  • Локальная история: она намного лучше управляется и проще.

  • Аннотации и история SVN: проще просмотреть, а также вы можете легко просмотреть историю только для такой части целого исходного файла.

  • Автозаполнение повсюду, например, окна выражения выражения и состояния точки останова.

  • Интеграция Maven... намного, намного проще и хорошо интегрирована.

  • Рефакторы гораздо ближе к руке, такие как вставка циклов, обертывание/литье, переименование и добавление переменных.

  • Найти много мощных и хорошо организованных. Даже в больших проектах

  • Значительно стабильная работа с несколькими ветвями большого проекта в одно и то же время (как бывшее исправление 1,5 ГБ по источникам веток и необходимость работать в них одновременно, идея показала его прочные возможности)

  • Более чистый и простой интерфейс...

  • И, проще использовать только с клавиатурой, позволяя разделить необходимость использования мыши для множества простых таков, экономя ваше время и давая вам больше внимания на код... где это важно!

И теперь, будучи open source, база пользователей Idea будет экспоненциально расти.

Ответ 13

Структурный поиск и замена.

Например, найдите что-то вроде:

  System.out.println($string$ + $expr$);

Где $string $является литералом, а $expr $является выражением типа my.package.and.Class, а затем заменяется на:

  $expr$.inspect($string$);

Ответ 14

Мое время может немного отличаться от этой темы, но я просто должен был ответить.

Я огромный поклонник затмения, используя его с первого появления. Друг сказал мне тогда (еще 10 лет назад), что это будет игрок. Он был прав.

Однако! Я только начал использовать IntelliJ, и если вы не видели или не использовали списки изменений - вам не хватает программирования на небесах.

Возможность отслеживать мои измененные файлы (на моей ветке развития ala clearcase) была тем, что я искал в плагине для eclipse. Intellij отслеживает все ваши изменения для одной фиксации, очень просто. Вы можете изолировать измененные файлы с помощью настраиваемых списков. Я использую это для файлов конфигурации, которые должны быть уникальными локально, но постоянно помечены, когда я синхронизирую или сравниваю с репозиторией - перечисляя их в списке изменений, я могу их контролировать, но аккуратно убирать их, чтобы я мог сосредоточиться на реальных дополнениях Я делаю.

Также есть плагин Commit Log, который выводит текст всех изменений для тех SCCS, которые не интегрированы с вашим программным обеспечением отслеживания ошибок. Вставка журнала в историю работы с билетами фиксирует файлы, их версию, дату/время и ветку/теги. Это круто, как черт.

Все это может поддерживаться через плагины (или будущие улучшения) в eclipse, я ставлю; Тем не менее, Intellij делает это ветерок.

Наконец, я очень взволнован по поводу основной любви к этому продукту - нажатия клавиш, так что это болезненно, но весело.

Ответ 15

Отладчик IntelliJ имеет очень удобную функцию под названием "Evaluate Expression", которая намного лучше, чем кулон затмений. Он имеет полное завершение кода, и я считаю, что он вообще "более полезен".

Ответ 16

Хорошо, для меня это тысяча крошечных вещей. Некоторые макросы, GUI-макет вообще в Eclipse, я считаю ужасным. Я не могу открыть несколько проектов в разных окнах в Eclipse. Я могу открыть несколько проектов, но после этого система, основанная на просмотре, меняет кучу вещей, когда я переключаю файлы. Проверки кода IntelliJ выглядят лучше. Его всплывающие помощники для исправления распространенных проблем хороши. Множество простых функций юзабилити, таких как боковая панель, где я могу нависнуть над горячей точкой, и она расскажет мне обо всех реализующих подклассах метода или метода, который я реализую и откуда.

Всякий раз, когда мне приходилось использовать или смотреть, как кто-то использует, Eclipse кажется, что они могут делать большинство вещей, которые я могу сделать в IntelliJ, но это занимает больше времени, и это clunkier.

Ответ 17

Ввести переменную. (Ctrl+Alt+V в Windows, Cmd+Alt+V в OSX)

Предположим, вы вызываете метод, service.listAllPersons() Нажмите Ctrl+Alt+V и Enter, а переменная для возвращаемого значения из вызова метода вставлена:

List<Person> list = service.listAllPersons();

Сохраняет ввод текста, и вам не нужно проверять тип возвращаемого метода, который вы вызываете. Особенно полезно при использовании дженериков, например

new ArrayList<String>()

[ввести переменную]

ArrayList<String> stringArrayList = new ArrayList<String>();

(конечно, вы можете легко изменить имя переменной перед нажатием Enter)

Ответ 18

IntelliJ имеет поддержку intellisense и рефакторинга из кода в документы jspx.

Ответ 19

Для меня это поддержка IDEA maven, особенно в версии 9, не имеет себе равных. Синхронность проекта на лету с модой Maven просто фантастична и делает развитие приятным.

Ответ 20

Intellij имеет гораздо более совершенный SVN-модуль, чем Subversive или Subclipse, и он работает! Количество времени, которое мы потратили впустую на слияние исходных файлов с использованием Eclipse, не обдумывает. Это не проблема с IntelliJ, потому что плагин помогает вам гораздо больше.

Также плагин Subclipse ненадежный - мы регулярно имеем экземпляры, в которых плагин не считает, что какой-либо код был проверен на SVN другими разработчиками, но есть - сервер CI обработал их!

Ответ 21

эмулятор VIM. Этот плагин обеспечивает почти полную эмуляцию vi/vim/gvim при редактировании файлов в IDEA.       Поддерживаются следующие функции:       

  •           
  • Кнопки движения          
  • Удаление/изменение          
  • Вставить команды режима          
  • Marks          
  • Регистры          
  • VIM undo/redo          
  • Команды визуального режима          
  • Некоторые команды Ex          
  • Некоторые: установка параметров          
  • Регулярные выражения полного VIM для поиска и поиска/замены          
  • Макросы          
  • Diagraphs          
  • История командной строки          
  • История поиска          
  • Jumplists          
  • Справка VIM      

некоторые комментарии об этом плагине от http://plugins.jetbrains.net/plugin/?id=164

                                                                         Я не вижу, чтобы когда-либо возвращался к другим идеям из-за этого плагина.                                                                                            Лучшее из обоих миров... Удивительный!.                                                                                             что я отсутствовал во всех IDE.

Ответ 23

Несколько других вещей:

  • распространять параметры/исключения, когда изменение подписи метода, очень удобен для глубокого обновления методов внутри стека вызовов
  • Проверка кода SQL в строках, переданных в качестве аргументов для вызовов jdbc (и весь новый комплект язык).
  • реализовано/перезаписано в значках для интерфейсов и классов (и их методов) и умная реализация навигации (Ctrl + Alt + Click или Ctrl + Alt + B)
  • связь между интерфейсами EJB 2.1 и классами bean (включая поддержку рефакторинга); старый один, но все же чрезвычайно ценный при работе над более старыми проектами

Ответ 24

Две вещи, которые IntelliJ делает для этого Eclipse, не очень ценны для меня:

Разделители методов: эти слабые серые линии между методами делают код более читаемым

Сглаживание текста: делает код очень приятным в среде IDE

Ответ 25

Одной из очень полезных функций является возможность частично построить проект реактора Maven, так что будут включены только те части, которые вам нужны.

Чтобы сделать это немного яснее, рассмотрим случай коллекции файлов WAR с большим количеством общих ресурсов (например, JavaScript, Spring файлы конфигурации и т.д.), которые разделяются между ними, используя метод наложения. Если вы работаете на какой-либо веб-странице (работаете в Jetty) и хотите изменить часть кода наложения, который хранится в отдельном модуле, вы обычно ожидаете остановить Jetty, запустить сборку Maven, запустить Jetty снова и Продолжать. Так обстоит дело с Eclipse и почти любой другой IDE, с которой я работал. Не так в IntelliJ. Используя настройки проекта, вы можете определить, какой фасет какого модуля вы хотите включить в сборку фона. Следовательно, вы получаете процесс, который кажется бесшовным. Вы вносите изменения в практически любой код в проект, и мгновенно он доступен после обновления браузера.

Очень аккуратно и очень быстро.

Я не мог себе представить кодирование переднего конца в чем-то вроде YUI, поддерживающего DWR/SpringMVC без него.

Ответ 26

Что-то, что я использую в IntelliJ, все время рефакторизуется по мере ввода. Я переписал классы из распечатки (изначально написанной в eclipse) с использованием обеих IDE, и я использовал на 40% меньше нажатий клавиш/щелчков мыши, чтобы писать те же классы в IntelliJ, что и eclipse.

Я бы не хотел использовать Eclipse, пока они не будут поддерживать столько рефакторинга с неполными фрагментами кода.

Вот более подробный список функций в IntelliJ 8.0/8.1 [http://www.jetbrains.com/idea/features/index.html]

Ответ 27

Преамбула к моему ответу: мое использование Eclipse ограничено. Мы нуждались в Java IDE для работы как с Windows, так и с Mac, а порт Mac с каждым днем ​​замедлялся. Это было много лет назад, и я уверен, что все в порядке. Но именно это заставило нас переключиться на IntelliJ, и мы были довольны этим.

Теперь для моего ответа: Одна большая разница, о которой я еще не упоминал, заключается в том, что техническая поддержка лучше с IntelliJ/Jet Brains. Мы отправляем электронное письмо на JetBrains и получаем окончательный ответ менее чем за час. Поиск ответов на проблемы Eclipse приводит к обычному, "глупым идиотом" ответам (как правило, небольшому числу ответов) наряду с гораздо большим количеством проницательных, полезных ответов. Но для получения реального ответа требуется определенная сортировка.

Ответ 28

Анализ потока данных: межпроцедурный анализ обратного потока и анализ прямого потока, как описано здесь. Мой опыт основан на Community Edition, который довольно хорошо анализирует поток данных. Он потерпел неудачу (отказался делать что-либо) в немногих случаях, когда код очень сложный.

Ответ 29

Есть одна вещь, которую IntelliJ делает намного лучше, чем Eclipse, и это пустые карманы!

Однако я предпочитаю использовать его и одно большое преимущество, которое у него над Eclipce - это то, как он синхронизируется с файловой системой, для больших проектов и медленных компьютеров (да, в рабочих средах ПК намного медленнее, чем у наших дома) Кажется, что Eclipse работает там, где IntelliJ, кажется, быстрее, хотя и с более медленным начальным индексированием.

Издание IntelliJ Community, очевидно, делает его бесплатным, но вы скоро захотите, чтобы эти дополнительные рефакторинги и приятные небольшие лакомства не были включены в выпуск CC.

На мой взгляд, это, как правило, лучший пользовательский опыт, но стоит ли его стоимость, чтобы каждый разработчик отвечал на вопросы.

Но будем благодарны за то, что у нас есть до трех отличных IDE для Java прямо сейчас, когда NetBeans становится все лучше.

Ответ 30

Прежде всего, я люблю intellij. Есть, по крайней мере, сотня функций, в которых это затмение отсутствует. Я говорю о величинах лучше в надежности и интеллекте, которые гипербола не может описать, когда речь идет о рефакторинге, переименовании, перемещении и других, о которых уже упоминалось.

НО, есть одна вещь, которая intellij не позволяет, какое затмение делает. Он не позволяет запускать сразу несколько проектов под одним и тем же vm.

Когда у вас есть отдельные проекты для передней, средней, основной, агенты..etc, где все они должны взаимодействовать друг с другом, вы не можете быстро изменять и отлаживать одновременно afaik. Единственный способ справиться с этим - использовать скрипты ant для развертывания и обновления баннеров в зависимых проектах или использовать maven.

Eclipse позволяет отлаживать несколько проектов в одном экземпляре ide vm.