IntelliJ организовать импорт

254

Есть ли в IntelliJ функция упорядочения импорта, аналогичная функции в Eclipse? У меня есть файл Java с несколькими классами, в которых отсутствует импорт. Пример:

package com.test;
public class Foo {
    public Map map;
    public JTable table;
}

В Eclipse я мог использовать Organize Imports, и он автоматически импортировал и то, java.util.Mapи другое javax.swing.JTable. В IntelliJ мне нужно по отдельности перейти в каждый класс, выбрать его и нажать Alt-Enter. Существует функция оптимизации импорта, но все, что она делает, это сортирует и расширяет существующий импорт.

Я использую IntelliJ 10.5.

Стив Куо
источник
17
Я до сих пор не могу найти альтернативу Ctrl + Shift + O
затмения
16
Вы пробовали Ctrl + Alt + O? Он автоматически добавляет любые уникальные импортные файлы и предлагает выбрать между аналогичными импортными операциями, нажав Alt + Enter. К вашему сведению, я использую IntelliJ 12.
Divesh Premdeep
6
За исключением того, что Ctrl + Alt + O не вернет импорт, который не может определиться ... Например, если есть несколько вариантов импорта (из которых я пытаюсь выяснить, как их выбрать, поскольку я не Если на моей клавиатуре есть символ, который они предлагают), то он скажет: «Неиспользованный импорт не найден».
Azurespot

Ответы:

356

Ctrl+ Alt+ O( Код → Оптимизировать импорт ... ) - это то, что вы ищете, как в Windows / Linux, так и в macOS.

Он говорит «Оптимизировать», но, если настроен для этого, он также будет:

  • организовать существующий импорт
  • удалить ненужный импорт
  • добавить новый необходимый импорт
  • добавить однозначный импорт на лету

Вы можете настроить параметры автоматического импорта в « Настройках → Редактор → Общие → Автоматический импорт », как описано Дэйвом .

Вы также можете изменить порядок автоматического импорта в разделе « Настройки → Редактор → Стиль кода → Java → Импорт ».

Райан Стюарт
источник
14
Я продолжаю получать временные отрицательные отзывы, вероятно, из-за путаницы. Я обновил свой ответ , чтобы объяснить , как это делает удовлетворить первоначальный вопрос.
Райан Стюарт
4
Это не работает, когда имена пакетов в зависимости изменились. Даже когда это все еще однозначно, я должен нажать на ClassName, нажав Alt + Enter и Enter, для каждого затронутого класса ...
Superole
7
На Mac это CTRL + ALT + O , а также (по крайней мере в Android Studio 1.0)
jlapoutre
9
Я нахожу довольно глупым, что опция «добавить однозначный импорт на лету» не включена по умолчанию. Кто предпочитает делать это сам, класс за классом?
toni07
3
Должно быть Settings → Editor → General → Auto Import?
Стив
100

Под "Settings -> Editor -> General -> Auto Import"есть несколько вариантов, касающихся автоматического импорта. Только однозначный импорт может быть добавлен автоматически; это один из вариантов.

Дэйв Ньютон
источник
Недостаточно голосов за этот ответ. Да, ответ @ ryan-stewart полностью отвечает на вопрос ОП, но этот ответ дает решение вопроса, который ОП не задавал: как мне исправить это навсегда, а не только как исправить это один раз.
Джонатан Ландрум
7
Это сейчасSetting > Editor -> General > Auto Import
счастливчик
Я исправил это добавление чека наclasses
Андреа Бергонзо
это не работает на уровне пакета / папки / проекта, не так ли? Я сделал ctrl + alt + o на проекте, src, java и сделал mvn clean test ... я все еще получил 'символ не найден' для недавнего рефакторинга.
старый монах
@ old-monk Работает с тем, что знает редактор; Скорее всего, что-то в рефакторе сломано, но невозможно сказать.
Дэйв Ньютон,
44

Простое и краткое решение сработало для меня.

Перейдите к File-> Settings-> Editor-> Auto Import-> Java(левая панель) и сделайте следующее: установите флажки " Add unambigious imports on the fly" и " Optimize imports on the fly"

Порекомендуйте это.

введите описание изображения здесь

Рохит Мандивал
источник
это не работает на уровне пакета / папки / проекта, не так ли? Я сделал ctrl + alt + o на проекте, src, java и сделал mvn clean test ... я все еще получил 'символ не найден' для недавнего рефакторинга.
старый монах
44

В дополнение к Optimize Importsи Auto Import, на которые указывали @ dave-newton и @ ryan-stewart в предыдущих ответах, перейдите к:

  • ИДЕЯ <= 13: File menu > Settings > Code Style > Java > Imports
  • IDEA> = 14: File menu > Settings > Editor > Code Style > Java > Imports(спасибо @ mathias-bader за подсказку!) Диалог настроек

Там вы можете точно настроить группировку и порядок или импорт, " Class count to use import with '*'" и т. Д.

Примечание:
поскольку IDEA 13 можно настроить параметры проекта по умолчанию из IDEA «стартовая страница»: Configure > Project defaults > Settings > .... Тогда каждый новый проект будет иметь эти настройки по умолчанию: введите описание изображения здесь

t0r0X
источник
7
Начиная с IntelliJ IDEA 14, это можно найти подSettings > Editor > Code Style > Java > Imports
Матиас Бадер
@ mathias-bader спасибо за указание на изменение настроек страниц
t0r0X
1
Слава за скриншоты! Любить это. Визуал стоит 1000 слов!
atom88
42

Июль 2015 года. Я пришел к выводу, что IntelliJ не поддерживает автоматическое разрешение импорта с помощью одной функции. «Организовать импорт» просто удаляет неиспользуемый импорт, он не разрешает не импортированные типы. Control-Space разрешает один не импортируемый тип. Не существует единого действия для разрешения импорта всех типов.

Стив Куо
источник
11
Это был мой опыт. Разочарование.
аяхуаска
1
Это также сбило меня с толку. Смотрите решение @ rohit ниже. Файл -> Настройки -> Редактор -> Общие -> Автоматический импорт -> Java и отметьте все три параметра, которые он выделил. Это сработало для меня.
Карл Россман
1
Странно, что это принятый ответ, так как он очень неточный. См. Stackoverflow.com/a/8609200/839646 .
Райан Стюарт
1
@RyanStewart не разрешает неоднозначный импорт так же, как Eclipse. Eclipse подскажет, когда он будет неоднозначным, IntelliJ просто проигнорирует его.
Стив Куо
9

перейдите к файлу, в котором вы хотите организовать импорт, или просто нажмите на весь пакет или даже нажмите на проект, затем нажмите CTRL + ALT + O

Хачатур Степанян
источник
1
Этот ответ уже существует . Вы можете добавить дополнительную информацию («Вы можете щелкнуть весь пакет или даже щелкнуть проект, чем нажать CTRL + ALT + O») в качестве комментария к этому ответу
Зак Лисобей
9

В IntelliJ 14 путь к настройкам для автоматического импорта изменился. Путь

IntelliJ IDEA-> Настройки-> Редактор-> Общие-> Автоматический импорт

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

Я не могу представить, почему это не будет установлено по умолчанию.

Джо
источник
3

Ярлык для Mac: (ctrl + opt + o)

Тьяго Гаспар
источник
1
Нет, его контроль + опция + o
Deividi Cavarzan
На самом деле этот ответ имеет те же ключи, что и тот, который наиболее проголосовал в этом вопросе.
Дейвиди Каварзан
2

Просто наведите курсор мыши на отсутствующий вид и нажмите клавиши на окнах ALT + ENTER

Baig
источник
2

ALT + ENTER были далеки от привычки к затмению, в IDEA у меня не работала мышь над мышью, поэтому setting>IDESetting>Keymap>Show intention actions and quick-fixesя поменял ее на левую кнопку мыши, она не поддерживала мышь! но щелчок левой кнопкой мыши был в порядке и ближе всего к моему намерению.

Ali.Mojtehedy
источник
2

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

Как правило, после вставки исходного кода и исправления однозначного импорта просто нажмите, F2чтобы выделить следующую ошибку компилятора. Если текущая ошибка - ошибка импорта, нажмите Alt+Enter, затем, Enterчтобы выбрать Importопцию, затем выберите правильный импорт. Затем нажмите еще F2раз.

Мартин Высний
источник
1

Этот плагин автоматически выполнит действие «организовать импорт» при сохранении файла: https://github.com/dubreuia/intellij-plugin-save-actions .

Для установки: "Файл> Настройки> Плагины> Просмотр репозиториев ...> Поиск" Сохранить действия "> Категория" Инструменты кода "". Затем активируйте действие сохранения «организовать импорт».

Александр Дюбрей
источник
Оценка инструмента по одному (отсутствующему) признаку может не рассматриваться как продуманное решение. Если плагин не работает, не стесняйтесь заполнить там ошибку: github.com/dubreuia/intellij-plugin-save-actions/issues .
Александр Дюбрей
5
Вы правы, это не продуманное суждение в обычных ситуациях. Это - однако - выраженное разочарование по поводу потрясающе отсутствующей базовой функции от окончательного инструмента. Я провел 2 часа в агонии, пытаясь заставить эту простую, важную функцию работать, но безуспешно. И что еще хуже, вместо того, чтобы быть встроенной функцией по умолчанию (например, как элегантно это делает Eclipse), плагин действительно должен быть написан для достижения этой цели! Это похоже на создание самого современного и самого сложного реактивного самолета, но без кондиционера, вместо этого каждому пассажиру предоставляется бумажный веер! Это заняло у меня 1 сек в Затмении.
DhafirNz
1
На самом деле, использование этого плагина высветило проблему и слабость в IntelliJ. Мне пришлось отключить этот плагин, потому что он захватывает IntelliJ при каждом автосохранении, делая его непригодным для использования и медленным. Это потому, что он пытается выполнить все действия сохранения каждый раз, когда я что-то печатаю. Если автоматическое сохранение можно как-то отключить, то этот плагин действительно будет очень полезен.
DhafirNz
0

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

Zorayr
источник
Уверен, что это мультиплатформенная функция
Зак Лисобей
0

Перейти к справке -> Найти действие (Сокращение для этого - Cntl + Shift + A) и введите Оптимизировать импорт (Сокращение для этого - Cntl + Alt + O)

Манга Рао
источник