Interrompi la pressione dei tasti della barra spaziatrice dall'attivazione del completamento automatico in Eclipse


86

Aggiornare

Questo problema è stato risolto in Eclipse 2018-12 . Questo comportamento è ancora predefinito, ma può essere disattivato: vedere la risposta accettata per sapere come

Lascio la domanda così com'era per i posteri e per quelli sulle versioni precedenti di Eclipse


In Eclipse, ho abilitato i suggerimenti in stile intellisense per Java andando a

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

e impostando quanto segue

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

fonte = Eclipse Intellisense?

Funziona brillantemente, a parte un fastidioso problema. Quando premo spacebar, il token che viene digitato viene completato automaticamente con tutto ciò che si trova in cima all'elenco dei suggerimenti. Abbastanza giusto, tranne che a volte scriverò un nome di classe / variabile con una corrispondenza legale esatta, ma questo non apparirà come il suggerimento principale. Quindi quando premo naturalmente spacebarEclipse inserisco qualcosa di completamente sbagliato.

Ad esempio, dopo aver digitato Cookiepremerò spacebare riceverò CookieMonster.

Sembra un bug e accade abbastanza spesso da essere fastidioso, ma nonostante ciò non voglio spacebarattivare il completamento automatico in generale . Potrei voler digitare un nome di variabile che non è stato ancora dichiarato o qualcosa di simile. Voglio usare il completamento automatico come strumento di supporto, ma la mia digitazione naturale dovrebbe sempre avere la priorità su di essa.

Vorrei interrompere l' spacebarattivazione del completamento automatico e ricorrere all'uso entero, meglio ancora, attivare il completamento automatico con un customtasto non utilizzato nella digitazione ordinaria.È possibile tutto questo?

Ho giocato con tutte le impostazioni di Content Assist senza alcun risultato. Cercare su Google la domanda restituisce solo una serie di risultati sulla disabilitazione della funzione di completamento automatico.


Questo problema è stato risolto da Eclipse 2018-12 [4.10] vedere la risposta accettata

È presente in tutte le versioni precedenti, ovvero 2018-09 [4.9], Photon [4.8], Oxygen [4.7], Neon [4.6], ecc.


+1 Stavo solo combattendo con lo stesso problema ... qualche fortuna nel risolverlo? È molto fastidioso premere spazio e ottenere qualcosa che non si desidera (non è stato selezionato!) ... Questo può essere utile per "Dichiarazione di tipo", ma per "nomi di variabili" non è ragionevole.
emgsilva

Sfortunatamente no. Sai se lo stesso problema esiste nell'ultima versione Kepler (4.3)? Non ho ancora aggiornato, ma in tal caso aggiornerò la domanda
davnicwil

3
Sfortunatamente quello stesso comportamento si verifica in Keplero (4.3) ... È davvero un peccato. Mi piace molto quell'attivazione automatica ma è davvero fastidioso averlo fatto una tale selezione in diverse situazioni. La mia soluzione temporanea è aumentare leggermente il tempo di attivazione, in modo da scrivere la maggior parte del nuovo nome della variabile ... ma questo non funziona sempre. Cercherò un po 'più a fondo questo problema e probabilmente lo riferirò a Eclipse, poiché penso che sia un bug e non una funzionalità.
emgsilva

possibile duplicato di stackoverflow.com/questions/7371618/… (indicando che anche Indigo si è già comportato in questo modo)
herman

6
A giudicare dal numero di voti positivi su questa domanda e dalla mancanza di voti positivi sulle risposte, sembra che Eclipse debba risolvere questo problema!
andrewb

Risposte:


20

Eclipse 2018-12 era già patchato per questo!

Una patch per il bug 348857 è stata recentemente unita al progetto Eclipse ed è stata rilasciata come parte di Eclipse 2018-12 . Puoi scaricare quella versione qui .

Ora hai una nuova opzione per disabilitare tutti i trigger di inserimento a parte enter, il che impediràspacebar di causare il completamento automatico.

Basta andare su Preferenze ... -> Java -> Editor -> Content Assist (o Finestra -> Preferenze -> Java -> Editor -> Content Assist su Windows) e selezionare Disabilita i trigger di inserimento tranne 'Enter' , come mostrato screenshot qui sotto: Disabilitare l'inserimento attiva le preferenze


1
Eccellente, grazie mille. Ho aggiunto un titolo alla tua risposta in modo che le persone vedano chiaramente che è per le versioni attuali. Altre risposte sono obsolete.
callmebob

1
@Pyves Mi ci è voluto un po 'per accettare questa nuova risposta, mi scuso, ma non uso più Eclipse e non sono riuscito a verificarlo. Ad ogni modo, sì, questo sembra risolvere definitivamente il problema e sono davvero contento che sia stato risolto più di 6 anni dopo!
davnicwil

Qualcuno riscontra un problema in cui la soppressione del trigger non funziona all'interno della visualizzazione Shell di debug? Per me la barra spaziatrice attiva il completamento automatico. (Sono a giugno 2019)
William Dutton,

@William Dutton forse qualcosa da segnalare in una segnalazione di bug separata.
Pyves

26

C'è una soluzione per questo problema nel tracker dei problemi . Copia il barattolo nella cartella eclipse / dropins. Al successivo riavvio lo spazio viene disabilitato come trigger di completamento automatico.

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

Eclipse 12-2018 e versioni successive: funziona in modo nativo, controlla la risposta di Pyves.


2
Sembra fantastico ma .. non funziona per me in Eclipse Juno - nessun cambiamento nel comportamento, la barra spaziatrice attiva ancora il completamento automatico. Funziona per te in Kepler? Dove si trovano il pulsante della barra degli strumenti / le voci di menu per attivare o disattivare lo strumento menzionato nel thread del bug?
davnicwil

1
Sì, funziona per me in Kepler Service Release 1. Tuttavia non vedo nemmeno gli elementi della barra degli strumenti.
Pascalius

Questo non funziona per me in Eclipse Luna SR2 (4.4.2 - Build Id: 20150219-0600).
BrainSlugs83

Ho appena creato un plug-in molto velocemente (sotto nella risposta di @ AndrewXu sulla scrittura di plug-in) che cambia il comportamento in Eclipse Luna per accettare solo Tab e Invio come chiavi di completamento intelli-sense.
BrainSlugs83

1
@Pascalius grazie per la tua risposta che per molto tempo è stata la migliore, ma ora Eclipse ha risolto il problema rendendolo configurabile in modo nativo. Questo è sottolineato in una risposta più recente, quindi l'ho accettata invece perché ora è il modo migliore per risolvere il problema.
davnicwil

7

Utilizza una versione SDK di eclipse

1.apri Plug-in Visualizza e trova org.eclipse.jface.text, fai clic con il tasto destro, scegli Importa come Progetto di origine. Dopo l'importazione, lo trovi nel tuo spazio di lavoro.

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

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

cambia in

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

3. Esporta org.eclipse.jface.text

Fare clic con il pulsante destro del mouse sulla cartella del progetto org.eclipse.jface.text, scegliere esporta -> Plugin e frammenti distribuibili, quindi, destinazione scegliere il file di archivio, finire. Sostituisci quello in eclipse / plugins con quello che generi.


2
Per coloro che si chiedono come aprire questa vista, vai su "Finestra" -> "Mostra vista" -> "Altro ..." e nella casella di testo del filtro inizia a digitare "plug" e quindi seleziona "Plug-in" dalla casella sotto e premere "OK".
BrainSlugs83

Inoltre, se stai cercando un'esperienza più simile a Visual Studio, ti consiglio di commentare completamente quel blocco (il blocco predefinito), commentare il blocco "\ t" e quindi trovare il blocco che gestisce "\ r" e "\ n" (proprio sopra questi due) e aggiungendo "\ t". - Questo ti darà il completamento della scheda. :-)
BrainSlugs83

(Per coloro che non vogliono affrontare tutti questi problemi, ecco il mio per la versione a 64 bit di Eclipse Luna SR2 4.4.2: 1drv.ms/1GZhJPq - tieni presente le modifiche che ho menzionato sopra.)
BrainSlugs83

@ BrainSlugs83 Se potessi a) pubblicare il codice su GitHub oppure b) aggiungere "." fino al completamento dei trigger, sarebbe fantastico.
lakemalcom

Perché l'hai usato al 0x20posto di ' '?
Finanzia la causa di Monica

3

La barra spaziatrice è stata una chiave per selezionare il completamento automatico anche in Indigo. Per quanto ne so, questo non può essere configurato. In effetti, questo è probabilmente il motivo per cui esiste il ritardo.

Suggerisco di impostare il ritardo su un valore ottimale che ti consenta di digitare cose come private void ...comodamente senza attivare suggerimenti per privatee void. Quindi, se ricevi un suggerimento perché hai aspettato troppo a lungo, premi Esc per interrompere Content Assist.


Ho avuto solo un successo limitato dall'aumento del ritardo.
Raedwald

0

Stessa configurazione di davnicwil, stesso problema, ancora su eclipse 4.4.

Soluzione : intercetta (aggancia) MAIUSC + SPAZIO (tieni premuto) su (finestra dell'editor) eclipse e sostituiscilo con ESC, SPAZIO (sequenza). Ora sei tu a decidere tra

  • Completamento automatico + SPAZIO: premi SPAZIO quando è presente l'autosuggestione
  • solo SPAZIO: premere una combinazione di tasti predefinita o una sequenza (ad esempio MAIUSC + SPAZIO)

Su Windows puoi usare http://www.heise.de/download/activaid.html (puoi anche usare AutoHotkey, java native hook, ...)

HowTo con ActivAid:

  1. Apri Ac'tivAid, seleziona "UserHotkeys"
  2. cliccare su "+", impostare una descrizione
  3. fare clic su "scorciatoia", premere ad esempio MAIUSC + SPAZIO
  4. Comando: "{ESC} {SPACE}" (senza virgolette)
  5. fare clic su "+", selezionare il frame dell'editor di eclissi, premere INVIO
  6. fare clic su OK, OK in Ac'tivAid

Il mio file di configurazione: activAid / settings / ac'tivAid.ini: [UserHotkeys]

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

Puoi anche rimappare i tasti su tastiere non inglesi con "HotStrings", ad es. Ö -> {, ä->} ecc.


0

Finalmente ha funzionato.

Prova a scaricare questo org.eclipse.jface.text.jar e copialo nella cartella del tuo plugin (Tipicamente eclipse / plugin). Non dimenticare di eseguire il backup del tuo.

Funziona su Eclipse Juno.

Se il collegamento non funziona, commenta, grazie.


MARS1 Eclipse non può essere avviato, java.lang.RuntimeException: Impossibile trovare l'applicazione "org.eclipse.ui.ide.workbench" nel registro.
Tiina

-3

È possibile disabilitare l'attivazione automatica tramite la casella di controllo in

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

e attivare la funzione di completamento automatico su richiesta. Il tasto di scelta rapida predefinito per questo è

CTRL+Space


3
L'intero problema è che voglio il comportamento di attivazione automatica, solo senza la barra spaziatrice che esegue il completamento automatico
davnicwil

-3

In Eclipse vai su Finestra -> Preferenze -> Generali -> Chiavi e rimuovi l'associazione per il comando Content Assist.


1
Ciò eliminerebbe la possibilità di visualizzare i suggerimenti utilizzando ctrl + spazio. Quello che vuole l'OP è un modo per disabilitare la selezione di un suggerimento usando la barra spaziatrice. Non esiste alcuna associazione di tasti per questo.
Herman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.