Verhindern Sie, dass durch Drücken der Leertaste die automatische Vervollständigung in Eclipse ausgelöst wird

86

Aktualisieren

Dies wurde in Eclipse 2018-12 behoben . Dieses Verhalten wird standardmäßig immer noch, kann aber aus konfiguriert werden - siehe die akzeptierten Antwort für wie

Ich werde die Frage so lassen, wie sie für die Nachwelt und für diejenigen in früheren Versionen von Eclipse war


In Eclipse habe ich Vorschläge im Intellisense-Stil für Java aktiviert, indem ich zu gegangen bin

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

und stellen Sie Folgendes ein

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

source = Eclipse Intellisense?

Dies funktioniert hervorragend, abgesehen von einem nervigen Problem. Wenn ich drücke spacebar, wird das eingegebene Token automatisch mit dem vervollständigt, was oben in der Vorschlagsliste steht. Fair genug, außer dass ich manchmal einen Klassen- / Variablennamen mit einer genauen rechtlichen Übereinstimmung eingebe, aber dies wird nicht als oberster Vorschlag angezeigt. Wenn ich also natürlich spacebarEclipse drücke, fügt etwas völlig Falsches ein.

EG nach dem Tippen Cookiewerde ich schlagen spacebarund bekommen CookieMonster.

Dies scheint ein Fehler zu sein und passiert oft genug, um nervig zu sein, aber trotzdem möchte ich spacebarim Allgemeinen keine automatische Vervollständigung auslösen . Möglicherweise möchte ich einen Variablennamen eingeben, der noch nicht deklariert wurde, oder etwas Ähnliches. Ich möchte die automatische Vervollständigung als Hilfsprogramm verwenden, aber meine natürliche Eingabe sollte immer Vorrang vor ihr haben.

Ich möchte aufhören spacebar, die automatische Vervollständigung auszulösen, und entweder auf die Verwendung zurückgreifen enteroder besser noch die automatische Vervollständigung mit einer customTaste auslösen, die bei der normalen Eingabe nicht verwendet wird. Ist irgendetwas davon möglich?

Ich habe vergeblich mit allen Einstellungen in Content Assist herumgespielt. Wenn Sie die Frage googeln, werden nur einige Ergebnisse zum Deaktivieren der Funktion zur automatischen Vervollständigung zurückgegeben.


Dieses Problem wurde ab Eclipse 2018-12 [4.10] behoben. Siehe die akzeptierte Antwort

Es ist in allen früheren Versionen vorhanden, dh 2018-09 [4.9], Photon [4.8], Oxygen [4.7], Neon [4.6] usw.

davnicwil
quelle
+1 Ich habe gerade mit dem gleichen Problem gekämpft ... Haben Sie Glück, dieses Problem zu lösen? Es ist sehr ärgerlich, die Leertaste zu drücken und etwas zu erhalten, das Sie nicht wollten (Sie haben es nicht ausgewählt!) ... Dies mag für "Typdeklaration" gut sein, aber für "Variablennamen" ist es nicht sinnvoll.
Emgsilva
Leider nicht. Wissen Sie, ob das gleiche Problem in der neuesten Version von Kepler (4.3) besteht? Ich habe noch kein Upgrade durchgeführt, aber wenn ja, werde ich die Frage aktualisieren
davnicwil
3
Leider findet genau das gleiche Verhalten in Kepler (4.3) statt ... Es ist wirklich schade. Ich mag diese automatische Aktivierung sehr, aber es ist wirklich ärgerlich, wenn sie in verschiedenen Situationen eine solche Auswahl trifft. Meine vorübergehende Lösung besteht darin, die Aktivierungszeit geringfügig zu verlängern, damit ich den größten Teil des neuen Variablennamens schreibe ... dies funktioniert jedoch nicht immer. Ich werde dieses Problem etwas weiter untersuchen und dies wahrscheinlich Eclipse melden, da ich denke, dass es sich um einen Fehler handelt, der keine Funktion ist.
Emgsilva
mögliches Duplikat von stackoverflow.com/questions/7371618/… (was darauf hinweist, dass sich Indigo auch schon so verhalten hat)
herman
6
Gemessen an der Anzahl der Stimmen bei dieser Frage und dem Mangel an Stimmen bei den Antworten sieht es so aus, als müsste Eclipse dies beheben!
Andrewb

Antworten:

19

Eclipse 2018-12 wurde dafür bereits gepatcht!

Ein Patch für Bug 348857 wurde kürzlich mit dem Eclipse-Projekt zusammengeführt und als Teil von Eclipse 2018-12 veröffentlicht . Sie können diese Version hier herunterladen .

Sie haben jetzt eine neue Option zum Deaktivieren aller Einfügetrigger außer enter, um zu verhindern, spacebardass eine automatische Vervollständigung verursacht wird.

Gehen Sie einfach zu Einstellungen ... -> Java -> Editor -> Inhaltsassistent (oder Fenster -> Einstellungen -> Java -> Editor -> Inhaltsassistent unter Windows) und wählen Sie Einfügetrigger außer 'Eingabe' deaktivieren , wie in der Abbildung gezeigt Screenshot unten: Das Deaktivieren der Einfügung löst Einstellungen aus

Pyves
quelle
1
Ausgezeichnet, vielen Dank. Ich habe Ihrer Antwort eine Überschrift hinzugefügt, damit die Leute klar sehen, dass es sich um die aktuellen Versionen handelt. Andere Antworten sind veraltet.
Callmebob
1
@Pyves Es hat eine Weile gedauert, bis ich diese neuere Antwort akzeptiert habe, entschuldige mich, aber ich benutze Eclipse nicht mehr und bin nicht dazu gekommen, sie zu überprüfen. Wie auch immer, ja, das scheint das Problem definitiv zu lösen und ich bin wirklich froh, dass es mehr als 6 Jahre später gelöst wurde!
Davnicwil
Hat jemand ein Problem, bei dem die Triggerunterdrückung in der Debug-Shell-Ansicht nicht funktioniert? Für mich löst die Leertaste die automatische Vervollständigung aus. (Ich bin am Juni 2019)
William Dutton
@ William Dutton möglicherweise etwas in einem separaten Fehlerbericht zu melden.
Pyves
26

Hierfür gibt es eine Lösung für den Issue-Tracker . Kopieren Sie das Glas in den Ordner Eclipse / Dropins. Beim nächsten Neustart wird der Speicherplatz als Autocompletion-Trigger deaktiviert.

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

Eclipse 12-2018 und neuer: Dies funktioniert nativ, überprüfen Sie die Antwort von Pyves.

Pascalius
quelle
2
Sieht fantastisch aus, aber in Eclipse Juno funktioniert es bei mir nicht - keine Verhaltensänderung, die Leertaste aktiviert weiterhin die automatische Vervollständigung. Funktioniert das für Sie in Kepler? Wo befinden sich die Schaltflächen- / Menüelemente der Symbolleiste zum Umschalten des im Bug-Thread genannten Tools?
Davnicwil
1
Ja, funktioniert für mich in Kepler Service Release 1. Die Symbolleistenelemente werden jedoch auch nicht angezeigt.
Pascalius
Dies funktioniert bei mir in Eclipse Luna SR2 (4.4.2 - Build-ID: 20150219-0600) nicht.
BrainSlugs83
Ich habe gerade ganz schnell ein Plug-In erstellt (siehe unten in der Antwort von @ AndrewXu zum Schreiben von Plug-Ins), das das Verhalten in Eclipse Luna so ändert, dass nur Tab und Enter als Intelli-Sense-Vervollständigungsschlüssel akzeptiert werden.
BrainSlugs83
1
@Pascalius, vielen Dank für Ihre Antwort, die lange Zeit die beste war, aber jetzt hat Eclipse dies behoben und nativ konfigurierbar gemacht. Dies wird in einer neueren Antwort hervorgehoben, daher habe ich diese stattdessen akzeptiert, da dies jetzt der beste Weg ist, um das Problem zu lösen.
Davnicwil
7

Verwenden Sie eine SDK-Version von Eclipse

1. Öffnen Sie die Plug-Ins. Zeigen Sie org.eclipse.jface.text an, suchen Sie mit der rechten Maustaste und wählen Sie Als Quellprojekt importieren. Nach dem Import finden Sie es in Ihrem Arbeitsbereich.

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

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

ändern

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

3.Exportieren Sie org.eclipse.jface.text

Klicken Sie mit der rechten Maustaste auf den Projektordner von org.eclipse.jface.text, wählen Sie Exportieren -> Bereitstellbare Plugins und Fragmente. Als nächstes wählen Sie als Ziel die Archivdatei aus und beenden Sie den Vorgang. Ersetzen Sie die in Eclipse / Plugins durch die von Ihnen generierte.

Andrew Xu
quelle
2
Wenn Sie sich fragen, wie Sie diese Ansicht öffnen können, gehen Sie zu "Fenster" -> "Ansicht anzeigen" -> "Andere ..." und geben Sie im Filtertextfeld "plug" ein und wählen Sie dann "Plug-ins" aus dem Feld aus unten und drücken Sie "OK".
BrainSlugs83
Wenn Sie auf der Suche nach einer Visual Studio-ähnlichen Erfahrung sind, empfehle ich, diesen Block nur vollständig zu kommentieren (den Standardblock), den Block '\ t' zu kommentieren und dann den Block zu finden, der '\ r' und behandelt '\ n' (direkt über diesen beiden) und Hinzufügen von '\ t'. - Dadurch erhalten Sie die Registerkarte. :-)
BrainSlugs83
(Für diejenigen, die all diese Probleme nicht durchstehen möchten, ist hier meine für die 64-Bit-Version von Eclipse Luna SR2 4.4.2: 1drv.ms/1GZhJPq - beachten Sie die oben erwähnten Änderungen.)
BrainSlugs83
@ BrainSlugs83 Wenn Sie a) den Code an github senden oder b) "." zu Ende Trigger, das wäre super.
Lakemalcom
Warum hast du 0x20statt verwendet ' '?
Fund Monica Klage
3

Die Leertaste war auch in Indigo ein Schlüssel zur Auswahl der automatischen Vervollständigung. Meines Wissens kann dies nicht konfiguriert werden. In der Tat ist dies wahrscheinlich der Grund, warum die Verzögerung besteht.

Ich schlage vor, die Verzögerung auf einen optimalen Wert einzustellen, mit dem Sie beispielsweise private void ...bequem tippen können, ohne Vorschläge für privateund auszulösen void. Wenn Sie dann einen Vorschlag erhalten, weil Sie zu lange gewartet haben, drücken Sie die Esc-Taste, um den Inhaltsassistenten abzubrechen.

ihr Mann
quelle
Ich hatte nur begrenzten Erfolg mit der Erhöhung der Verzögerung.
Raedwald
0

Gleiche Konfiguration wie davnicwil, gleiches Problem, noch in Eclipse 4.4.

Lösung : Abfangen (Haken) UMSCHALT + LEERTASTE (gedrückt halten) bei (Editor-Fenster) Eclipse und durch ESC, LEERTASTE (Sequenz) ersetzen. Jetzt entscheidest du mich zwischen

  • Autovervollständigung + LEERTASTE: Drücken Sie die LEERTASTE, wenn Autosuggestion vorhanden ist
  • nur LEERTASTE: Drücken Sie eine vordefinierte Tastenkombination oder Sequenz (z. B. UMSCHALT + LEERTASTE).

Unter Windows können Sie http://www.heise.de/download/activaid.html verwenden (Sie können auch AutoHotkey, Java Native Hook, ...) verwenden.

Anleitung mit ActivAid:

  1. Öffnen Sie Ac'tivAid und wählen Sie "UserHotkeys".
  2. Klicken Sie auf "+" und legen Sie eine Beschreibung fest
  3. Klicken Sie auf "Abkürzung" und drücken Sie zB UMSCHALT + LEERTASTE
  4. Befehl: "{ESC} {SPACE}" (ohne Anführungszeichen)
  5. Klicken Sie auf "+", wählen Sie den Eclipse-Editor aus und drücken Sie die EINGABETASTE
  6. Klicken Sie in Ac'tivAid auf OK, OK

Meine Konfigurationsdatei: activAid / settings / ac'tivAid.ini: [UserHotkeys]

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

Sie können Tasten auch auf nicht englischen Tastaturen mit "HotStrings" neu zuordnen, z. B. ö -> {, ä->} usw.

user3178008
quelle
0

Endlich hat es geklappt.

Laden Sie diese org.eclipse.jface.text.jar herunter und kopieren Sie sie in Ihren Plugin-Ordner ( normalerweise Eclipse / Plugin). Vergessen Sie nicht, Ihre eigene zu sichern.

Funktioniert mit Eclipse Juno.

Wenn der Link nicht funktioniert, kommentieren Sie dies, danke.

cy198706
quelle
MARS1 Eclipse konnte nicht gestartet werden, java.lang.RuntimeException: Die Anwendung "org.eclipse.ui.ide.workbench" wurde nicht in der Registrierung gefunden.
Tiina
-3

Sie können die automatische Aktivierung über das Kontrollkästchen in deaktivieren

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

und aktivieren Sie die automatische Vervollständigung bei Bedarf. Der Standard-Hotkey hierfür ist

CTRL+Space

Giskou
quelle
3
Das ganze Problem ist, dass ich das automatische Aktivierungsverhalten möchte , nur ohne dass die Leertaste die automatische
Vervollständigung ausführt
-3

Gehen Sie in Eclipse zu Fenster -> Einstellungen -> Allgemein -> Schlüssel und entfernen Sie die Bindung für den Befehl Content Assist.

SpaceTrucker
quelle
1
Das würde die Möglichkeit entfernen, die Vorschläge mit Strg + Leertaste aufzurufen. Das OP möchte die Auswahl eines Vorschlags über die Leertaste deaktivieren. Dafür existiert keine Schlüsselbindung.
Hermann