Я работаю преподавателем в онлайн-школе и обучаю студентов программированию. Периодически приходится рассказывать о некоторых функциях IntelliJ IDEA. На хабре не нашлось подходящей статьи с краткой выжимкой наиболее используемых функций. Кроме того, возникало несколько ситуаций, когда требовалось оптимизировать рутинные задачи на работе. Так и родилась идея этой статьи. Думаю, что даже разработчик с опытом в пару лет смогут найти для себя что-то новое и полезное.
Горячие клавиши
Начать хочу с базовой вещи - это горячие клавиши. Это не только увеличение скорости написания кода, но и сохранение концентрации. По себе замечал, что пока найдешь нужный файл, то контекст прошлого файла из головы уже улетучился. Поэтому с горячими клавишами работа становится более легкой. Ниже привожу список хоткеев, которые сам регулярно использую.
Навигация
Последние файлы = Ctrl + Е
Перейти обратно = Ctrl + Alt + Left
Последние места редактирования = Ctrl + Shift + E
Структура файла = Ctrl + F12
Дерево навигации = Alt + home
Перейти к последнему редактированному участку кода = Ctrl + Shift + Backspace
Горизонтальная прокрутка = Shift + колесо мыши
Переключаться между вкладками = Alt + (Влево/Вправо)
Переход к следующей подчеркнутой ошибке в коде = F2
Рефакторинг кода
Подсказки конструктора или метода = Ctrl + Р
Обернуть код какой-то конструкцией = Ctrl + Alt + T
Изменение имени переменной = Shift + F6
Автогенерация кода = Alt + Insert
Удалить текущую строку = Ctrl + Y
Двигать функцию вверх / вниз = Ctrl + Shift + (Вверх/Вниз)
Двигать строку вверх / вниз = Alt + Shift + (Вверх/Вниз)
Заменить параметр енама = Ctrl + Space -> Tab
Подвинуть строку по табам влево = Shift + Tab
Визуал
Поправить стиль кода = Ctrl + Alt + L
Выделить окружение строки - Ctrl + W
Закомментировать по одной строке = Ctrl + Slash
Закомментировать блок кода = Ctrl + Shift + Slash
Схлопнуть функцию = Ctrl + Minus
Развернуть функцию = Ctrl + Plus
Тренировки
Я и сам много раз гуглил что-то вроде "топ горячих клавиш для IntelliJ IDEA", находил большой список и закрывал этот сайт. Новые навыки закрепляются только после тренировок, для этого в IntelliJ IDEA есть встроенный тренажер. Открыть его можно в разделе (Help -> Learn Ide Features).
Кроме этого, для запоминания прекрасно поможет плагин Key promoter
, об этом будет ниже.
История локальных изменений
IntelliJ IDEA предоставляет встроенный инструмент для отслеживания изменений в проекте — Local History. Эта функция автоматически сохраняет версии файлов, позволяя возвращаться к предыдущим состояниям кода даже без использования Git. Local History работает в фоновом режиме, записывая каждое изменение в файлы проекта, и предлагает удобный интерфейс для просмотра и восстановления этих изменений.
Основные возможности Local History
Автоматическая фиксация изменений: Local History автоматически создает новые версии файлов при каждом сохранении, компиляции или запуске программы. Это позволяет отслеживать изменения в реальном времени и не беспокоиться о ручной фиксации версий.
Просмотр истории изменений: Разработчик может просматривать историю изменений любого файла в проекте. В специальном окне будут представлены все зафиксированные версии файла с указанием времени и даты изменения.
Сравнение версий: Инструмент позволяет сравнивать текущую версию файла с любой из предыдущих. Это удобно для анализа изменений и выявления различий между двумя версиями кода. Для сравнения версий нужно выбрать две интересующие версии в окне истории и нажать кнопку "Compare with Current".
Восстановление предыдущих состояний: Если необходимо вернуть файл к одному из предыдущих состояний, достаточно выбрать нужную версию в окне истории и нажать кнопку "Revert". Это действие отменит все последующие изменения и восстановит выбранную версию файла.
Отмена изменений: Помимо полного отката к предыдущей версии, Local History позволяет отменить отдельные изменения. Для этого нужно сравнить текущую версию с нужной и вручную выбрать, какие изменения стоит оставить, а какие — удалить.
Настройка частоты фиксации: Пользователь может настроить частоту автоматической фиксации изменений в настройках IntelliJ IDEA. Это позволяет оптимизировать работу инструмента под конкретные нужды проекта.
Примеры использования
Восстановление удаленного фрагмента кода: Допустим, вы удалили важный фрагмент кода и сохранили файл. С помощью Local History можно быстро вернуться к предыдущей версии файла и восстановить утраченное без отката других изменений
Просмотр изменений за определенный период: Если нужно просмотреть, какие изменения были внесены в проект за последние сутки или неделю, это легко можно сделать в интерфейсе Local History и детально изучить каждое изменение.
Работа без Git: Даже если вы не используете систему контроля версий (Git), Local History обеспечит базовую защиту от потери данных и возможность возврата к предыдущим состояниям кода. Такая ситуация может возникнуть при написании пет проектов.
Как открыть:
ПКМ -> Local History -> Show History
File -> Local history -> Show History
Постфиксное дополнение (Postfix Completion)
Постфиксное дополнение (Postfix Completion) — это удобная функция в IntelliJ IDEA, позволяющая быстро генерировать кодовые шаблоны на основе сокращений. Кроме того, эта функция позволяет автоматически включать наши переменные в эти шаблоны.
Принцип работы
Постфиксное дополнение основано на наборе заранее настроенных правил, которые составляют пару из сочетания букв и символов и соответствующего этому сочетанию шаблона кода. Думаю, все знают про то, что sout
заменяется на System.out.println()
.
Однако в этом шаблоне не используется никакая переменная. Рассмотрим следующий пример кода:
int [] numbers = {1,2,3,4,5};
numbers.for
У нас есть массив numbers
, при вводе numbers.for
IntelliJ IDEA автоматически создает шаблон цикла с использованием массива:
int [] numbers = {1,2,3,4,5};
for (int number : numbers) {
}
Можно просмотреть все варианты ввода, нажав Ctrl + J на дефолтных настройках горячих клавиш.
Основные примеры использования
-
Генерация циклов:
fori
→for (int i = 0; i < array.length; i++) {}
for
→for (Element element : elements) {}
-
Создание методов:
psvm
→public static void main(String[] args) {}
soutv
→System.out.println("value=" + value);
-
Работа с объектами:
new
→ Конструктор объекта с заполненными параметрами.cast
→ Приведение типа.
Настройки
Пользователи могут настраивать постфиксы в соответствии со своими потребностями: редактировать стандартные и добавлять свои. Для этого нужно перейти в настройки IntelliJ IDEA (File → Settings → Editor → General → Postfix Completion) и добавить или изменить существующие правила.
Пресеты (File and Code Templates)
Шаблоны файлов и кода (File and Code Templates) в IntelliJ IDEA — это инструмент, который помогает ускорить процесс создания новых файлов и структур кода, соответствующих принятым стандартам и соглашениям, избегая необходимости повторного ввода одинаковых фрагментов.
Мне очень помогла эта функция, когда нужно было написать одинаковые классы для новых эндпоинтов в рабочем проекте: сущность, репозиторий, сервис, контроллер, маппер и тесты.
Что такое File Templates?
Шаблоны файлов (File Templates) — это предустановленные структуры для новых файлов, которые создаются в проекте. Например, при создании нового класса Java, IntelliJ IDEA автоматически добавляет стандартный заголовок с комментариями, информацию о пакете и основной каркас класса. Пользовательские шаблоны включать любой код и комментарии.
Что такое Code Templates?
Шаблоны кода (Code Templates) предназначены для быстрой генерации стандартных блоков кода, например, при вводе /**
над методом создастся JavaDocs для этого метода с учетом входных параметров метода, выходного параметра и ошибок в секции throws.
Настройки
Шаблоны файлов и кода можно настраивать в соответствии с индивидуальными требованиями. Для этого нужно перейти в настройки IDE (File → Settings → Editor → File and Code Templates) и изменить существующие шаблоны или создать новые.
Конфигурация вкладок
По умолчанию вкладки располагаются сверху, над редактором кода. Это неудобно при дебаге: постоянно открываются новые вкладки, а старые при лимите закрываются. Конфигурацию вкладов можно настроить: переместить вкладки из строки над редактором в колонку справа, а еще увеличить лимит вкладок для закрытия предыдущих. Для этого нужно перейти в раздел настроек (File -> Settings -> Editor -> Editor Tabs)
Плагины
Установка плагинов сейчас усложнилась в силу определенных событий. Сейчас последовательность действий такая:
Нужно узнать подходящую версию плагина для своей версии IntelliJ IDEA (это можно сделать найдя плагин в разделе File -> Settings -> Plugins)
Далее нужно с использованием спец средств для смены локации скачать zip архив нужной версии плагина с сайта JetBrains
А затем нужно установить этот плагин в том же разделе File -> Settings -> Plugins, в шестеренке будет опция "Install plugin from Disk"
Key promoter X
Key Promoter X — это плагин, который помогает пользователям освоить и запомнить горячие клавиши. Главная цель плагина — повысить производительность разработчиков, предлагая подсказки и напоминания о полезных сочетаниях клавиш.
Функционал
Подсказки: Key Promoter X показывает всплывающую подсказку с предложением горячей клавиши всякий раз, когда пользователь пытается выполнить действие с помощью мыши.
Рекомендации: Плагин анализирует действия пользователя и предлагает подходящие горячие клавиши для оптимизации работы.
Обучение: Key Promoter X обучает использованию горячих клавиш, показывая статистику прогресса освоения и запоминание.
Rainbow brackets
Rainbow Brackets — это популярный плагин, который помогает визуально выделять скобки и парные элементы в коде. Основная цель этого плагина заключается в том, чтобы облегчить чтение и написание кода.
SonarLint
SonarLint – это статический анализатор кода. Его основная цель – выявление потенциальных ошибок, проблем безопасности и нарушений стандартов кодирования прямо во время написания кода. Плагин поддерживает различные языки программирования, включая Java, Python, JavaScript и другие.
Основные функции SonarLint:
Анализ в реальном времени: Плагин анализирует код сразу после его ввода, предоставляя мгновенную обратную связь о возможных проблемах.
Интеграция с SonarQube: При необходимости результаты анализа можно синхронизировать с сервером SonarQube для централизованного управления качеством кода.
Настраиваемые правила: Есть возможность настройки кастомных правил проверки, специфичных для компании или проекта.
Ниже представлен пример анализа с указанием ошибок:
Gigacode
Gigacode - это AI-плагин, который помогает генерировать, редактировать и объяснять код. Кроме этого, можно в специальном чате задавать вопросы. Ниже приведу некоторые примеры использования плагина.
1) Inline подсказки
Inline подсказки - это варианты окончания строки, в процессе набора кода. В некоторых случаях плагин предлагает не одну строчку, а сразу несколько. По моим ощущениям, часто подсказывает верные варианты, и это заметно ускоряет написание кода.
2) Генерация кода по комментарию
Эта функция активируется, когда мы пишем в комментарии то, что хотим сделать, а плагин генерирует код, необходимый для реализации этих действий. Для этой функции нужна определенная тренировка, чтобы научиться грамотно писать запрос. Рассмотрим несколько примеров:
Пример 1:
Шаг 1: написать метод:
public static void printEven(List numbers) {
}
Шаг 2: Написать комментарий для метода:
/*
* Задание 2:
* Написать код, который будет выводить только четные числа из списка
*/
public static void printEven(List numbers) {
}
Шаг 3: Нажать enter внутри метода, гигакод сгенерирует реализацию:
/*
* Задание 2:
* Написать код, который будет выводить только четные числа из списка
*
*/
public static void printEven(List numbers) {
numbers.stream()
.filter(number -> number % 2 == 0)
.forEach(System.out::println);
}
Пример 2:
var strList = List.of("CString1", "bString2", "CString3", "CString4", "bString5");
/**
* 1. Перевести в верхний регистр
* 2. Получить мапу: ключ - первая буква строки, значение - строки
*
*/
// Этот код сгенерирован гигакодом:
Map> collect = strList.stream()
.map(String::toUpperCase)
.collect(Collectors.groupingBy(s -> s.charAt(0)));
3) Рефакторинг кода
В меню справа после установки плагина появляется специальная иконка, которая открывает окно с чатом:
В этом чате можно задавать вопросы и использовать несколько предустановленных команд. Для демонстрации используем следующий кусок кода:
String[] text = new String[] {"I ", "Love ", "Java"};
int i = 1;
while (i < text.length) {
System.out.print(i);
}
Выделяем его в редакторе и пишем в чате:
Отрефактори код, чтобы он выводил в консоль все элементы массива text
Нейронка выдает следующий результат:
public class Main {
public static void main(String[] args) {
String[] text = {"I ", "Love ", "Java"}; // Создаем массив строк
for (String word : text) { // Итерируемся по массиву с помощью цикла for-each
System.out.print(word); // Выводим элементы массива на экран
}
}
}
4. Объяснение кода
В чате можно выбрать несколько предустановленных команд, /explain
- одна из них. С помощью этой команды можно получить объяснение кода для выделенного текста или всего файла
Ниже представлен пример объяснения от плагина:
Кроме этого в чате можно задавать любые вопросы. Недавно мне потребовалось составить регулярку и плагин с этим справился. Никогда регулярки не любил)
Структурный поиск
Во время изучения статей на хабре о возможностях Inteleji Idea нашел интересную статью про структурный поиск. Эта функция позволяет искать не вхождение какой-то строки, а наличие целого фрагмента кода с заданными параметрами. Ниже прикладываю ссылку на статью.
PS
Если использовать большинство возможностей и функций, описанных в статье, то легкость и скорость написания кода значительно увеличатся. Если у вас есть свои секретные фишки, то делитесь ими в комментариях. Буду благодарен за конструктивную критику и обратную связь.
Ссылки
Ссылка на маркетплейс с плагинами от JetBrains:
https://plugins.jetbrains.com/
Статья про Gigacode на хабре:
https://habr.com/ru/companies/usetech/articles/825470/
Статья про структурный поиск:
https://habr.com/ru/companies/krista/articles/510478/
Дополнительную информацию про localHistory в официальной документации:
https://www.jetbrains.com/help/idea/local-history.html
Ссылка для скачивания плагина Gigacode:
https://gigacode.ru/
Комментарии (8)
pep
13.12.2024 16:24Реклама Сбера, ты ли это?
По теме, возможно из очевидного, но: Shift + Shift магия. Поиск файлов, выполнение команд, работа со всем окружением в целом. Файлы искать можно по заглавным буквам, например найти
HiddenGigacodeAdsServiceProvider
можно введяHGASP
или даже часть.
VGoudkov
13.12.2024 16:24Гм. Я бы назвал статью Junior of IntelliJ IDEA :) И вот почему:
Первое, что нужно сделать, после того как открыл IDEA - зайти в Help / Keyboard Shortcuts PDF. Распечатать, повесить на стенку и учить наизусть. Там всё, что приведено в статье, и ещё много интересного :)
Собственно второе, что нужно сделать - это отключить долбанное дефолтное переназначение F-кнопок на клавиатуре ноута со всяких "Открыть браузер", "Уменьшить громкость" и прочие "Почесать спинку" на нормальные F-xx и убрать руку от мышки. При профессиональной работе она нужна очень редко - либо потыкать в интерфейс, для которого нет shortcuts (ну как нет: значит просто лень настроить) либо повыделять что-то блоком на экране, т.е. тот самый мультикурсор. Главное меню тоже по shortcuts надо звать - Alt-H, K - и вот на экране тот самый PDF из предыдущего абзаца. Честно говоря, у меня есть круг задач, которые я стабильно делаю мышкой, но обычно они связаны с навигацией в каком-то из tool windows. Видимо просто лень придумывать shortcut-ы, они у меня кажется кончились, приходится делать многоуровневые. Мечтаю о клавиатуре с F12 - F24 или педали для переключения слоёв. Рояль не предлагать :)
Следующее, с чем надо разобраться и начать использовать - это Live Templates (File | Settings | Editor | Live Templates). Похоже на Postfix completion, плюс: определение переменных уровня шаблона и контекста, в котором шаблон доступен. С его использованием становится не нужным например file templates: определяешь новый live template и вставляешь в пустой файл (Alt+1, Alt+Ins) по мере необходимости.
Вот мой любимый (самодельный), лень каждый раз это всё печатать руками, вызывается по
pat
+ Tab (PArametrized Test):static Stream<Arguments> sourceFor$METHOD_NAME$() { return Stream.of( Arguments.of("", ""), Arguments.of("", ""), Arguments.of("", "") ); } @ParameterizedTest @MethodSource("sourceFor$METHOD_NAME$") public void should$METHOD_NAME$(String object0, String object1){ $END$ }
После применения аккуратно правишь аргументы в парадигме - подали на вход - ожидаем результат и соответственно параметры метода на 11 строке, и вот он - параметризованный тест во всей красе. Минуc размножение тестов copy-paste, что обычно и происходит.
Стоит поковырять VM оptions, дефолтные настройки это очень, очень мало. У нас были случаи креша с порчей открытых файлов. На 6GB получается держать пару открытых проектов среднего размера. Если у вас "альтернативно импортированное" решение - то файлик, в котором нужно править опции - он не тот, который в документации, он другой.
Постарайтесь не использовать local history и shelve как основное хранилище изменений. Оно блин ЛОКАЛЬНОЕ. И прекрасно дохнет вместе с локальным винтом, чисткой кешей, переустановкой и ещё по тысяче причин. Git наше всё, тем более, что его поддержка близка к идеальной (но сравнивать два документа Word или PowerPoint, или отрисовать дерево веток как TortoiseGIt - не умеет). При правильном разведении веток - все мысли и идеи хранятся там, особенно если не стесняться писать многострочные пояснения к коммитам - что сделано, что не сделано, что падает и как и про что ещё нужно не забыть. WIP - коммит (Work In Progress) в локальную ветку после завершения каждого "логического блока" (30 минут - два часа работы, не больше) - это нормально. Всё равно потом будет squash и все душевные метания пропадут.. Зато возвращаешься к ветке через две недели, читаешь собственную историю и вспоминаешь, что имелось в виду. Но это уже не про IDEA, это про процесс разработки.
Обязательно надо настраивать цветовую схему редактора кода. Дефолтная - мягко говоря не раскрывает всех возможностей среды по идентификации элементов, но тут целую статью надо писать.
На первый взгляд выглядит попугаисто, но каждый цвет показывает на тип элемента:
белый - метод класса;
голубой - абстрактный метод
сиреневый - статический метод или интерфейс;
синий - класс;
зелёный - параметр;
салатовый - локальная переменная read-only;
желто-зелёный - параметр, захваченный из контекста;
Кстати - если у вас не слишком хорошо со зрением, то штатный шрифт среды разработки можно и нужно увеличить: у меня актуальный фаворит для самой IDEA Inter 15, для кода - Noto Sans Mono те же 15. Время от времени надоедают, меняю на аналоги из Google Fonts.
Главное меню пункты Code и Refactoring. Нужно протыкать каждый и понять, зачем он нужен и что делает. Избавляет от тысяч ручных правок файлов и экономит время. Но опять же - мышкой туда не набегаешься, поэтому учим клавиатурные комбинации. Мои фавориты - ну кроме очевидных рефакторингов, Extract/Introduce и Inline - Inspect Code, Analyze Data Flow from Here / to Here.
Кажется, комментарий начинает превращаться в статью. Поэтому заканчиваю на каждодневных Call Hierarchy (Сtrl-Alt-H под Windows) и просто Hierarchy (Ctrl-H), первое работает на сигнатуре метода, второе - где угодно в коде (и тогда показывает про текущий класс / интерфейс, или на конкретном типе - тогда рассказывает про него.
Удачи!
Gabenskiy Автор
13.12.2024 16:24А цветовая схема кода - это в настройках идеи или плагин какой-то? Благодарю за развернутый ответ с многими полезностями
edwgiz2
Еще удобная штука Multiple cursors
https://www.jetbrains.com/help/idea/multicursor.html
Gabenskiy Автор
Интересная функция, но в моей практике редко встречается потребность в множественном редактировании. А у вас часто?
edwgiz2
Несколько раз в неделю использую,
например при написании java records, factrories. Удобно скопировать несколько а иногда и очень мого строчек из json, csv привести их например из snacke_case в camelCase. Названия колонок таблицы БД также из ui idea копируются как многострочный список и переводятся в код.
Еще кейс - из логов скопировать только нужные фрагменты, например названия классов.