Заборонити натискання клавіші пробілу запускати автозаповнення в 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

джерело = Eclipse Intellisense?

Це працює блискуче, крім однієї докучливої ​​проблеми. Коли я натискаю spacebar, токен, що вводиться, автоматично заповнюється тим, що знаходиться у верхній частині списку пропозицій. Досить справедливо, за винятком того, що іноді я вводжу ім'я класу / змінної з точною юридичною відповідністю, але це не відображатиметься як головна пропозиція. Тож, коли я природно натискаю на spacebarEclipse, вставляється щось зовсім неправильне.

EG після набору тексту Cookieя вдарю spacebarі отримаю CookieMonster.

Це здається помилкою і трапляється досить часто, щоб дратувати, але навіть незважаючи на це, я взагалі не хочу spacebarзапускати автозаповнення . Я можу захотіти ввести ім'я змінної, яке ще не оголошено, або щось подібне. Я хочу використовувати автозаповнення як допоміжний інструмент, але моє природне введення тексту завжди повинно мати пріоритет над ним.

Я хотів би припинити spacebarспрацьовувати автозаповнення, або повернутися до використання enter, або, ще краще, запускати автозаповнення за допомогою customключа, який не використовується в звичайному наборі тексту. Чи можливо щось із цього?

Я безрезультатно погрався з усіма налаштуваннями Content Assist . Прогуглив питання просто повертає купу результатів про вимкнення функції автозавершення.


Ця проблема виправлена ​​в 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 -> Редактор -> Допомога вмісту (або Вікно -> Налаштування -> Java -> Редактор -> Допомога вмісту в Windows) і виберіть Вимкнути тригери вставки, крім 'Enter' , як показано в скріншот нижче: Вимкніть налаштування тригерів вставки


1
Чудово, велике спасибі. Я додав заголовок до вашої відповіді, щоб люди чітко бачили, що це для поточних версій. Інші відповіді застарілі.
callmebob

1
@Pyves Мені потрібно було деякий час, щоб прийняти цю нову відповідь, вибачення, але я більше не використовую Eclipse і не отримав необхідності перевірити її. Так чи інакше, так, схоже, це остаточно вирішує проблему, і я дуже радий, що це було вирішено понад 6 років тому!
davnicwil

У когось виникає проблема, коли придушення тригера не працює у поданні налагоджувальної оболонки? Для мене пробіл запускає автозаповнення. (Я в червні 2019 року)
Вільям Даттон,

@William Dutton, можливо, щось позначити в окремому звіті про помилки.
Півес,

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 - Ідентифікатор збірки: 20150219-0600).
BrainSlugs83,

Я просто дуже швидко підбив плагін (нижче у відповіді @ AndrewXu про написання плагінів), який змінює поведінку в Eclipse Luna, приймаючи лише Tab і Enter як ключі завершення Intelli-sense.
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» у полі нижче та натисніть "OK".
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, та ж проблема, все ще на затемненні 4.4.

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

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

У вікнах ви можете використовувати http://www.heise.de/download/activaid.html (ви також можете використовувати AutoHotkey, власний хук Java, ...)

Як робити з ActivAid:

  1. Відкрийте Ac'tivAid, виберіть "UserHotkeys"
  2. натисніть на "+", встановіть опис
  3. клацніть на "ярлик", натисніть, наприклад, SHIFT + ПРОБІЛ
  4. Команда: "{ESC} {ПРОБІЛ}" (без лапок)
  5. натисніть "+", виберіть кадр редактора затемнення, натисніть 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" не вдалося знайти в реєстрі.
Тійна

-3

Ви можете вимкнути автоматичну активацію за допомогою прапорця в

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

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

CTRL+Space


3
Вся проблема в тому, що я хочу поведінку
автоактивації

-3

У Eclipse перейдіть до Вікна -> Налаштування -> Загальні -> Клавіші та видаліть прив'язку для команди Content Assist.


1
Це позбавить можливості висувати пропозиції, використовуючи ctrl + пробіл. Те, що хоче OP, - це спосіб відключити вибір пропозиції за допомогою пробілу. Для цього не існує прив’язки ключів.
Герман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.