![](https://habrastorage.org/storage2/8fb/711/efd/8fb711efd087dc0f5a7b2416e6fb3708.png)
Наблюдая за со своими знакомыми, которые недавно начали изучать программирование или перешли на Eclipse c другой IDE, я часто замечаю что они почти не используют вспомогательные инструменты среды разработки. Они либо не знают о них вообще, либо не понимают какую практическую пользу они могут принести.
Данная статья предназначена в основном для начинающих в работе с Eclipse. Но в процессе подготовки статьи я сам узнал о нескольких простых и удобных инструментах, которые за два года активной разработки ни разу не использовал.
В данной статье речь пойдет о навигации и редактировании.
Внутри скриншоты.
Так как, основная польза данных инструментов проявляется при использовании горячих клавиш, я составил следующие таблицы:
Навигация
![]() ![]() |
![]() |
Описание |
Ctrl+F |
⌘+F |
Простой поиск/замена |
Ctrl+H |
Ctrl+H |
Продвинутый поиск/замена |
Ctrl+Shift+R |
⌘+⇧+R |
Открыть ресурс |
Ctrl+Shift+T |
⌘+⇧+T |
Открыть логическую структуру(Класс) |
Ctrl+Shift+G |
⌘+⇧+G |
Найти вхождения переменной, метода, класса |
F4 |
F4 |
Открыть меню иеарархии |
Ctrl+LeftClick |
⌘+LeftClick |
Перейти к реализации или определению класса, функции, переменной |
F3 |
F3 |
Перейти к определению |
Ctrl+T |
⌘+T |
Перейти к реализации |
Ctrl+L |
⌘+L |
Перейти к линии с определенным номером |
Alt+( left right ) |
⌘+( [ ] ) |
Перемещение в предыдущее/следующее место просмотра в редакторе |
Ctrl+Q |
Ctrl+Q |
Перейти к последнему месту редактирования |
Ctrl+E |
⌘+E |
Показать список открытых в редакторе файлов |
Ctrl+F6 (Ctrl+Shift+F6) |
⌘+F6 (⌘+⇧+F6) |
Следующий/предыдущий редактор |
Ctrl+O |
⌘+O |
Показать поля и методы класса |
Ctrl+T |
⌘+T |
Показать иерархию класса |
F2 |
F2 |
Открыть javadoc |
Ctrl+Shift+(up | down) |
Ctrl+⌥+(up | down) |
Перейти к следующему/предыдущему методу |
![]() ![]() |
![]() |
Описание |
Ctrl+Space |
Ctrl+Space |
Автодополнение |
Ctrl+1 |
⌘+1 |
Возможные действия |
Ctrl+Shift+O |
⌘+⇧+O |
Организация импорта пакетов |
Ctrl+Shift+F |
⌘+⇧+F |
Автоформатирование кода |
Shift+Alt+S |
⇧+⌥+S |
Меню генерации кода |
Shift+Alt+T |
⇧+⌥+T |
Меню рефакторинга |
Shift+Alt+R |
⇧+⌥+R |
Переименование переменной, метода, класса |
Shift+Alt+M |
⌘+⌥+M |
Выделение части кода в отдельный метод |
Ctrl+Alt+(up|down) |
⌘+⌥+(up|down) |
Дублирование строки |
Alt+(up|down) |
⌥+(up|down) |
Перемещение строки |
Ctrl+/ Ctrl+7 |
⌘+/ ⌘+7 |
Однострочный комментарий |
Ctrl+Shift+/ |
⌘+⇧+/ |
Многострочный комментарий |
Ctrl+D |
⌘+D |
Удалить строку или выделенный фрагмент |
Рассмотрим каждый инструмент более подробно:
Простой поиск/замена
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/88b/004/836/88b00483695a0627b774a2c6ac911b84.png)
Данный инструмент присутствует в многих текстовых редакторах. Предоставляет возможность находить нужные вхождения текста в текущем документе. И при необходимости быстро заменить на другой текст.
Существует возможность поиска при помощи регулярных выражений, с помощью которой можно составить сложный поиск, однако используется крайне редко для поиска по одному классу.
Если выделить текст и применить данный инструмент — выделенный текст сразу подставится в поле поиска.
Применение:
— Быстрый переход к нужной части кода;
— Замена одного слова на другое. При необходимости написать две функции, которые идентичные по логической структуре, но работают с разными коллекциями, быстрее написать одну функцию, скопировать и сделать замену.
Продвинутый поиск/замена
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/2ab/2fa/a2c/2ab2faa2cfd7d1df618ebaabc5ae5d8d.png)
Данный инструмент имеет расширяет возможности, который был рассмотрен ранее.
Основные особенности:
— поиск по всем проектам, а не по одному;
— возможен как полнотекстовый поиск так и типизированный;
— при большом количестве файлов полнотекстовый поиск занимает большое количество времени.
Применение:
— Найти вхождения элемента или текста во всех проектах.
Открыть ресурс
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/427/20d/176/42720d176856ff2f5b30fe79bd9bc749.png)
Применение:
Быстрое открытий файла с данными или классом.
Открыть логическую структуру(Класс)
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/f7e/cc3/4e7/f7ecc34e7142a7aed770d494ff5821a5.png)
Можно ввести только заглавные буквы класса. Например, для поиска класса AbstractDogFactory достаточно ввести ADF.
Также можно использовать *.
Применение:
Быстрое открытие файла с классом. Другие файлы игнорируются.
Найти вхождения переменной, метода, класса
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/be3/1ee/8a4/be31ee8a4a99790db82853603f6bdea4.png)
Для выделенного элемента ищет его использование по всем проектам.
Применение:
Намного быстрее чем обычный поиск. Достаточно выделить элемент, применить инструмент и на экране список мест, где этот элемент используется.
Открыть меню иеарархии
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/2c2/781/492/2c27814921f5449a7dca199439537ecd.png)
Перейти к реализации или определению класса, функции, переменной
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
При зажатой клавише Ctrl левый клик мышкой по элементу производит переходит к его определению или реализации.
Применение:
— легко обнаружить где объявлялась переменная;
— быстрый переход в реализацию класса или метода.
Перейти к определению
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Переход к определению элемента, на котором стоит курсор.
Перейти к реализации
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Переход к реализации элемента, на котором стоит курсор.
Перейти к линии с определенным номером
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Переход к строке с заданным номером.
Применение:
При взаимодействии программисты для того чтобы указать место в коде — называют файл и строку.
Перемещение в предыдущее/следующее место просмотра в редакторе
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Возвращается на предыдущее/следующее место где просматривался исходный код.
Применение:
При углублении в реализацию одной из функций или класса, и возвращение назад.
Перейти к последнему месту редактирования
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Возвращается на предыдущее место где редактировался исходный код.
Применение:
Быстрый возврат на место работы.
Показать список открытых в редакторе файлов
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/55c/589/6d4/55c5896d40cc61920fc26df83fb8d5c2.png)
Применение:
Быстрый переход между файлами.
Следующий/предыдущий редактор
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/936/d5d/ef9/936d5def965fcc89c4235422276f6f95.png)
Данные сочетания клавиш не всегда удобны, по-этому имеет смысл переназначить их к примеру на Ctrl+Tab / Ctrl+Shift+Tab
Для быстрого переключения подойдет: Ctrl+Page Up/Page Down — Linux/Windows. Ctrl+Fn+Up/Down — OS X
Показать поля и методы класса
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/df6/2d5/4e3/df62d54e3b04bfb479632f895eb38338.png)
При повторном нажатии горячих клавиш в список добавляются методы из классов — родителей
Применение:
— быстрая оценка структуры класса;
— быстрый переход в нужный метод.
Показать иерархию класса
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/e0a/5ec/151/e0a5ec151f9646c90562f24f896231e6.png)
При повторном нажатии: разворачивает иерархию в обратную сторону и показывает реализованные интерфейсы.
Применение:
Быстрый переход в родительские классы.
Открыть javadoc
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/73e/8cd/743/73e8cd74338eadf298ba1ef149b97536.png)
Перейти к следующему/предыдущему методу
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Автодополнение
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Инструмент дает возможность не писать полные имена функций, классов и переменный, а только их часть, программист выбирает завершение из предложенных.
Однако многие не знают некоторых особенностей автодополнения в eclipse:
— если при выборе автодполнения нажать Ctrl+Enter вместо Enter, слово которое стоит правее курсора заменится на автодополненное.
— автодополнения работает для всех классов, даже для тех, для которых еще не сделан import. Если вы автодополните такой класс — импорт добавится автоматически.
— автодополнение работает для новых переменных:
если вы написали
Point2D
и вызовите автодополнение, то получите
Point2D point2d
— в eclipse присутствуют шаблоны для быстрого написания:
syso
получим
System.out.println();
Наиболее популярные шаблоны:
— syso
— for
— while
— switch
— catch
Посмотреть все шаблоны, а так же добавить свои можно в настройках, в вкладке «Templates».
Возможные действия
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
На мой взгляд самый полезный инструмент в процессе написания кода.
На основе того, на какой строке стоит курсор и есть ли выделение текста, eclipse предлагает возможные варианты изменений и дополнений.
Примеры работы инструмента:
— создание загрушек для реализации методов интерфейса или абстрактного класса
public class Run implements Runnable {
}
действия на строчке с названием класса
public class Run implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
}
}
— создание новых методов
Если в текущей части кода необходим метод, а он еще не существует.
boolean success = isSuccess();
создается метод
private boolean isSuccess() {
// TODO Auto-generated method stub
return false;
}
— объявление переменных
Если необходимо использовать результат работы функции
isSuccess();
объявляется переменная с правильным именем
boolean success = isSuccess();
— выделение константы
Если внутри кода есть цифра или текст, который необходимо вынести в константу, выделем его и применим инструмент:
String success = "success";
private static final String SUCCESS = "success";
Организация импорта пакетов
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Удаление импортов не используемых пакетов и добавление недостающих.
Автоформатирование кода
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Приведение кода в читабельный вид:
— делает правильные табуляции;
— добавляет/убирает пробелы;
— убирает лишние отступы;
— ограничивает длину строки — переносит текст на следующую другую строку.
Работает для всего выделенного участка кода, или для всего класса.
Применение:
Иногда быстрее написать плохо отформатированную функцию и нажать горячие клавиши, чем писать сразу красиво.
Меню генерации кода
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Автоматическая генерация — - get и set методов;
— заготовок переопределенных и реализуемых функций;
— hashcode и equals;
— toString;
— конструкторы.
Применение:
Не стоит тратить время на стандартные методы, если их реализации не является специфической.
Меню рефакторинга
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/73d/b4c/41b/73db4c41bcf65e25604a9e1be545f476.png)
Переименование переменной, метода, класса
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Переименование выделенного метода. Благодаря рефакторингу метод будет переименован по всему проекту.
Выделение части кода в отдельный метод
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
![](https://habrastorage.org/storage2/116/25b/34a/11625b34aa79865415713029b642ca8a.png)
Выделение выделенной части в новый метод. Все возможные дубликаты этой части кода в данном классе автоматически заменятся на вызов нового метода.
Дублирование строки
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Применение:
Если следующая строка будет похожа на текущую — быстрее скопировать текущую и изменить ее, чем писать еще раз.
Перемещение строки
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Применение:
Быстрый перенос части кода, без необходимости копировать и вставлять.
Однострочный комментарий
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
Многострочный комментарий
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
При использование на закомментированном коде — комментарии убираются.
Удалить строку или выделенный фрагмент
![](https://habrastorage.org/storage2/1de/99c/f09/1de99cf090d41e083fbc89861a44a137.png)
![](https://habrastorage.org/storage2/2e3/523/877/2e35238773cbded2d452100930a2303e.png)
![](https://habrastorage.org/storage2/eb5/f44/b2a/eb5f44b2a1fbf77b196e427a29cc34a4.png)
UPDATE: Исправил и дополнил статью.
Большое спасибо arturphoenix,AgentSIB,mishadoff,mdcool,Lihonosov,Aivean,anoshenko,lany,abusalimov,bimeg, netslow,majus за дополнения и комментарии.
Некоторые инструменты косвенно относятся к навигации и редактированию, по-этому я не включил их в статью, но я постораюсь их включить в следующую.