Остановить нажатие клавиши пробела от запуска автозаполнения в Eclipse


86

Обновить

Это было исправлено в Eclipse 2018-12 . Это поведение по-прежнему используется по умолчанию, но его можно отключить - см. Принятый ответ, чтобы узнать, как

Я оставлю этот вопрос для потомков, а для тех, кто использует более ранние версии Eclipse


В Eclipse я включил предложения в стиле intellisense для Java, перейдя в

Window -> Preferences -> Java/Editor/Content Assist

и установив следующие

Auto activation delay (ms) -> 0
Auto activation triggers for Java -> .(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

source = Eclipse Intellisense?

Это работает блестяще, за исключением одной досадной проблемы. Когда я нажимаю spacebar, набираемый токен автоматически заполняется тем, что находится в верхней части списка предложений. Достаточно справедливо, за исключением того, что иногда я набираю имя класса / переменной с точным юридическим соответствием, но это не будет лучшим предложением. Поэтому, когда я, естественно, нажимаю, spacebarEclipse вставляет что-то совершенно не то.

EG после набора Cookieя бью spacebarи получаю CookieMonster.

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

Я бы хотел прекратить spacebarзапускать автозаполнение и либо вернуться к использованию enter, либо, еще лучше, запустить автозаполнение с помощью customключа, который не используется при обычном вводе текста. Возможно ли это?

Я поигрался со всеми настройками Content Assist безрезультатно. Поиск в Google вопроса просто возвращает кучу результатов об отключении функции автозаполнения.


Эта проблема исправлена ​​в Eclipse 2018-12 [4.10] см. Принятый ответ

Он присутствует во всех предыдущих версиях, например, 2018-09 [4.9], Photon [4.8], Oxygen [4.7], Neon [4.6] и т. Д.


+1 Я как раз боролся с той самой проблемой ... Удачи в решении? Очень раздражает нажатие пробела и получение чего-то, что вам не нужно (вы не выбрали это!) ... Это может быть хорошо для «объявления типа», но для «имен переменных» нецелесообразно.
emgsilva

К сожалению нет. Вы знаете, существует ли такая же проблема в последней версии Kepler (4.3)? Я еще не
обновился,

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

возможный дубликат stackoverflow.com/questions/7371618/… (что указывает на то, что Индиго также уже вёл себя подобным образом)
Герман

6
Судя по количеству голосов за этот вопрос и отсутствию голосов за ответы, похоже, что Eclipse нужно это исправить!
andrewb 02

Ответы:


20

Eclipse 2018-12 уже был исправлен для этого!

Патч для ошибки 348857 был недавно объединен с проектом Eclipse и выпущен как часть Eclipse 2018-12 . Вы можете скачать эту версию здесь .

Теперь у вас есть новая возможность отключить все триггеры вставки, кроме enter, что предотвратит spacebarавтозаполнение.

Просто перейдите в Настройки ... -> Java -> Редактор -> Content Assist (или Window -> Preferences -> Java -> Editor -> Content Assist в Windows) и выберите Отключить триггеры вставки, кроме Enter , как показано в снимок экрана ниже: Отключить настройки триггеров вставки


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

1
@Pyves Мне потребовалось время, чтобы принять этот новый ответ, извинения, но я больше не использую Eclipse и не дошел до его проверки. В любом случае, да, похоже, это окончательно решает проблему, и я очень рад, что она была решена более чем через 6 лет!
davnicwil

У кого-нибудь возникает проблема, когда подавление триггера не работает в представлении Debug Shell? Для меня пробел запускает автозаполнение. (Я в июне 2019 г.)
Уильям Даттон

@William Dutton, возможно, стоит отметить что-то в отдельном отчете об ошибке.
Pyves

26

Для этого есть решение в системе отслеживания проблем. Скопируйте банку в папку eclipse / dropins. При следующем перезапуске пробел отключается как триггер автозаполнения.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=348857

Eclipse 12-2018 и новее: это работает изначально, проверьте ответ Pyves.


2
Выглядит потрясающе, но ... у меня это не работает в Eclipse Juno - никаких изменений в поведении, пробел по-прежнему активирует автозаполнение. Это работает для вас в Кеплере? Где находятся кнопки / пункты меню на панели инструментов для переключения инструмента, упомянутого в ветке сообщения об ошибке?
davnicwil

1
Да, у меня работает в Kepler Service Release 1. Однако я не вижу элементов панели инструментов.
Паскалиус

У меня это не работает в Eclipse Luna SR2 (4.4.2 - Build Id: 20150219-0600).
BrainSlugs83

Я просто очень быстро создал подключаемый модуль (ниже в ответе @ AndrewXu о написании подключаемых модулей), который изменяет поведение в Eclipse Luna, чтобы принимать только Tab и Enter в качестве ключей завершения с интеллектуальным контролем.
BrainSlugs83

1
@Pascalius благодарим вас за ваш ответ, который долгое время был лучшим, но теперь Eclipse исправил это и сделал настраиваемым изначально. Это указано в более новом ответе, поэтому я принял его вместо этого, поскольку теперь это лучший способ решить проблему.
davnicwil

7

Используйте версию SDK для eclipse

1. откройте «Просмотр подключаемых модулей» и найдите org.eclipse.jface.text, щелкните правой кнопкой мыши и выберите «Импорт в качестве исходного проекта». После импорта вы найдете его в своем рабочем пространстве.

2. В src / org / eclipse / jface / text / contentassist / CompletionProposalPopup.java

char[] triggers = t.getTriggerCharacter();
if(contains(triggers,key))

изменить на

if(key!='='&&key!=0x20&&contains(triggers,key))

3.Экспорт org.eclipse.jface.text

Щелкните правой кнопкой мыши папку проекта org.eclipse.jface.text, выберите экспорт -> Развертываемые плагины и фрагменты, затем место назначения выберите файл архива, завершите. Замените тот, который находится в eclipse / plugins, на тот, который вы создаете.


2
Для тех, кто задается вопросом, как открыть это представление, перейдите в «Окно» -> «Показать вид» -> «Другое ...» и в текстовом поле фильтра начните вводить «plug», а затем выберите «Plug-ins» в поле. ниже и нажмите «ОК».
BrainSlugs83

Кроме того, если вы ищете опыт, более похожий на Visual Studio, я рекомендую просто закомментировать этот блок полностью (блок по умолчанию), закомментировать блок '\ t', а затем найти блок, который обрабатывает '\ r' и '\ n' (прямо над этими двумя) и добавив к нему '\ t'. - Это даст вам завершение табуляции. :-)
BrainSlugs83

(Для тех, кто не хочет сталкиваться со всеми этими проблемами, вот мой для 64-битной версии Eclipse Luna SR2 4.4.2: 1drv.ms/1GZhJPq - имейте в виду изменения, о которых я упоминал выше.)
BrainSlugs83

@ BrainSlugs83 Если бы вы могли: а) опубликовать код на github или б) добавить "." до триггеров завершения, это было бы здорово.
lakemalcom

Почему вы использовали 0x20вместо ' '?
Иск Фонда Моники

3

Пробел был ключом для выбора автозаполнения даже в Indigo. Насколько мне известно, это невозможно настроить. Собственно, наверное, поэтому и существует задержка.

Я предлагаю установить для задержки какое-то оптимальное значение, которое позволит вам private void ...удобно печатать, не вызывая предложений для privateи void. Затем, если вы получили предложение, потому что вы слишком долго ждали, нажмите Escape, чтобы прервать Content Assist.


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

0

Та же конфигурация, что и у davnicwil, та же проблема, все еще на eclipse 4.4.

Решение : перехватить (перехватить) SHIFT + ПРОБЕЛ (нажать и удерживать) на затмении (окно редактора) и заменить его на ESC, ПРОБЕЛ (последовательность). Теперь ты мой выбор между

  • Автозаполнение + ПРОБЕЛ: нажмите ПРОБЕЛ при наличии автозаполнения
  • просто ПРОБЕЛ: нажмите предопределенную комбинацию клавиш или последовательность (например, SHIFT + ПРОБЕЛ)

В Windows вы можете использовать http://www.heise.de/download/activaid.html (вы также можете использовать AutoHotkey, собственный хук java, ...)

Как использовать ActivAid:

  1. Откройте Ac'tivAid, выберите «UserHotkeys».
  2. нажмите "+", установите описание
  3. нажмите "ярлык", нажмите, например, SHIFT + ПРОБЕЛ
  4. Команда: "{ESC} {SPACE}" (без кавычек)
  5. нажмите "+", выберите рамку редактора eclipse, нажмите ENTER
  6. нажмите ОК, ОК в Ac'tivAid

Мой файл конфигурации: activAid / settings / ac'tivAid.ini: [UserHotkeys]

Hotkey11=+Space
Path11=<Send>{ESC}{SPACE}
Description11=Eclipse Shift+Space -> Esc,Space
Category11=
Application11=ahk_class SWT_Window0

Вы также можете переназначить клавиши на неанглийской клавиатуре с помощью «HotStrings», например ö -> {, ä->} и т. Д.


0

Наконец-то разобрался.

Попробуйте загрузить этот org.eclipse.jface.text.jar и скопировать его в папку с плагином (обычно eclipse / plugin). Не забудьте сделать резервную копию своей.

Работает на Eclipse Juno.

Если ссылка не работает, прокомментируйте это, спасибо.


Не удалось запустить MARS1 Eclipse, java.lang.RuntimeException: приложение org.eclipse.ui.ide.workbench не может быть найдено в реестре.
Tiina

-3

Вы можете отключить автоматическую активацию, установив флажок в

Window -> Preferences -> Java/Editor/Content Assist

и активируйте функцию автозаполнения по запросу. Горячая клавиша по умолчанию для этого

CTRL+Space


3
Вся проблема в том, что мне нужна автоматическая активация, только без пробела, выполняющего автозаполнение
davnicwil

-3

В Eclipse перейдите в Window -> Preferences -> General -> Keys и удалите привязку для команды Content Assist.


1
Это уберет возможность вызывать предложения с помощью ctrl + Space. OP хочет способ отключить выбор предложения с помощью пробела. Для этого не существует привязки клавиш.
Herman
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.