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