Empêcher la pression de la barre d'espace de déclencher la saisie semi-automatique dans Eclipse

86

Mise à jour

Cela a été corrigé dans Eclipse 2018-12 . Ce comportement est toujours par défaut, mais peut être désactivé - voir la réponse acceptée pour savoir comment

Je laisserai la question telle qu'elle était pour la postérité, et pour ceux des versions antérieures d'Eclipse


Dans Eclipse, j'ai activé les suggestions de style intellisense pour Java en accédant à

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

et régler les éléments suivants

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

source = Eclipse Intellisense?

Cela fonctionne à merveille, à part un problème ennuyeux. Lorsque je frappe spacebar, le jeton en cours de saisie est automatiquement complété avec ce qui se trouve en haut de la liste de suggestions. Assez juste, sauf que parfois je tape un nom de classe / variable avec une correspondance légale exacte, mais cela n'apparaîtra pas comme la meilleure suggestion. Donc, quand je frappe naturellement, spacebarEclipse insère quelque chose de complètement faux.

EG après avoir tapé Cookieje vais frapper spacebaret obtenir CookieMonster.

Cela semble être un bug, et cela arrive assez souvent pour être ennuyeux, mais malgré cela, je ne veux spacebarpas déclencher la saisie semi-automatique en général . Je peux vouloir taper un nom de variable qui n'a pas encore été déclaré, ou quelque chose de similaire. Je souhaite utiliser la saisie semi-automatique comme outil d'aide, mais ma saisie naturelle doit toujours avoir la priorité sur elle.

Je voudrais arrêter de spacebardéclencher la saisie semi-automatique et revenir à l'utilisation enter, ou mieux encore déclencher la saisie semi-automatique avec une customtouche non utilisée dans la saisie ordinaire. Est-ce que tout cela est possible?

J'ai joué avec tous les paramètres de Content Assist en vain. Googler la question renvoie simplement un tas de résultats sur la désactivation de la fonction de saisie semi-automatique.


Ce problème est résolu depuis Eclipse 2018-12 [4.10] voir la réponse acceptée

Il est présent dans toutes les versions précédentes, à savoir 2018-09 [4.9], Photon [4.8], Oxygen [4.7], Neon [4.6], etc.

Davnicwil
la source
+1 Je me battais juste avec le même problème ... une chance pour résoudre ça? C'est très ennuyeux d'appuyer sur espace et d'obtenir quelque chose que vous ne vouliez pas (vous ne l'avez pas sélectionné!) ... Cela peut être bon pour la "déclaration de type", mais pour les "noms de variables" ce n'est pas raisonnable.
emgsilva
Malheureusement non. Savez-vous si le même problème existe dans la dernière version Kepler (4.3)? Je n'ai pas encore mis à jour mais si c'est le cas, je
mettrai à
3
Malheureusement, ce même comportement se produit dans Kepler (4.3) ... C'est vraiment dommage. J'aime beaucoup cette activation automatique mais c'est vraiment ennuyeux de faire une telle sélection dans plusieurs situations. Ma solution temporaire est d'augmenter légèrement le temps d'activation, de sorte que j'écris la plupart du nouveau nom de variable ... mais cela ne fonctionne pas toujours. Je vais chercher un peu plus loin ce problème, et je le rapporterai probablement à Eclipse, car je pense que c'est un bogue et non une fonctionnalité.
emgsilva
duplication possible de stackoverflow.com/questions/7371618/... (indiquant qu'Indigo s'est également déjà comporté comme ça)
herman
6
À en juger par le nombre de votes positifs sur cette question et le manque de votes positifs sur les réponses, il semble qu'Eclipse doit résoudre ce problème!
andrewb

Réponses:

20

Eclipse 2018-12 a déjà été patché pour cela!

Un correctif pour le bogue 348857 a récemment été fusionné avec le projet Eclipse et a été publié dans le cadre d' Eclipse 2018-12 . Vous pouvez télécharger cette version ici .

Vous avez maintenant une nouvelle option pour désactiver tous les déclencheurs d'insertion en dehors de enter, ce qui empêchera spacebarde provoquer l'auto-complétion.

Allez simplement dans Préférences ... -> Java -> Editeur -> Content Assist (ou Window -> Preferences -> Java -> Editor -> Content Assist sous Windows) et sélectionnez Désactiver les déclencheurs d'insertion sauf 'Entrée' , comme indiqué dans le capture d'écran ci-dessous: Désactiver les préférences des déclencheurs d'insertion

Pyves
la source
1
Excellent, merci beaucoup. J'ai ajouté un titre à votre réponse pour que les gens voient clairement que c'est pour les versions actuelles. D'autres réponses sont dépassées.
callmebob
1
@Pyves Il m'a fallu un certain temps pour accepter cette nouvelle réponse, excuses, mais je n'utilise plus Eclipse et je n'ai pas eu l'occasion de la vérifier. Quoi qu'il en soit, oui, cela semble résoudre définitivement le problème et je suis vraiment content qu'il ait été résolu plus de 6 ans plus tard!
davnicwil
Quelqu'un a-t-il un problème où la suppression du déclencheur ne fonctionne pas dans la vue Debug Shell? Pour moi, la barre d'espace déclenche la saisie semi-automatique. (Je suis en juin 2019)
William Dutton
@William Dutton peut-être quelque chose à signaler dans un rapport de bogue séparé.
Pyves
26

Il existe une solution sur le suivi des problèmes pour cela. Copiez le pot dans le dossier eclipse / dropins. Avec le prochain redémarrage, l'espace est désactivé comme déclencheur d'auto-complétion.

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

Eclipse 12-2018 et plus récent: Cela fonctionne de manière native, vérifiez la réponse de Pyves.

Pascalius
la source
2
Ça a l'air génial mais .. cela ne fonctionne pas pour moi dans Eclipse Juno - aucun changement de comportement, la barre d'espace active toujours la saisie semi-automatique. Est-ce que cela fonctionne pour vous dans Kepler? Où sont les boutons / éléments de menu de la barre d'outils pour basculer l'outil mentionné dans le fil de bogue?
davnicwil
1
Oui, fonctionne pour moi dans Kepler Service Release 1. Cependant, je ne vois pas non plus les éléments de la barre d'outils.
Pascalius
Cela ne fonctionne pas pour moi dans Eclipse Luna SR2 (4.4.2 - ID de build: 20150219-0600).
BrainSlugs83
Je viens de créer un plug-in très rapidement (ci-dessous dans la réponse de @ AndrewXu sur l'écriture de plug-ins) qui change le comportement dans Eclipse Luna pour n'accepter que Tab et Enter comme clés de complétion intelli-sense.
BrainSlugs83
1
@Pascalius merci pour votre réponse qui a longtemps été la meilleure, mais maintenant Eclipse a corrigé cela et l'a rendue configurable nativement. Ceci est souligné dans une nouvelle réponse, donc j'ai accepté celle-là à la place car c'est maintenant le meilleur moyen de résoudre le problème.
davnicwil
7

Utiliser une version SDK d'Eclipse

1. ouvrez la vue Plug-ins et recherchez org.eclipse.jface.text, cliquez avec le bouton droit de la souris, choisissez importer comme projet source. Après l'importation, vous le trouvez dans votre espace de travail.

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

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

changer en

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

3.Exporter org.eclipse.jface.text

Cliquez avec le bouton droit sur le dossier du projet de org.eclipse.jface.text, choisissez exporter -> Plugins et fragments déployables, ensuite, destination, choisissez le fichier d'archive, terminez. Remplacez celui dans eclipse / plugins par celui que vous générez.

Andrew Xu
la source
2
Pour ceux qui se demandent comment ouvrir cette vue, allez dans "Fenêtre" -> "Afficher la vue" -> "Autre ..." et dans la zone de texte du filtre, commencez à taper "plug", puis sélectionnez "Plug-ins" dans la boîte ci-dessous et appuyez sur "OK".
BrainSlugs83
De plus, si vous recherchez une expérience plus similaire à Visual Studio, je vous recommande de simplement commenter ce bloc entièrement (le bloc par défaut), de commenter le bloc '\ t', puis de trouver le bloc qui gère '\ r' et '\ n' (juste au-dessus de ces deux), et en y ajoutant '\ t'. - Cela vous donnera la complétion de l'onglet. :-)
BrainSlugs83
(Pour ceux qui ne veulent pas traverser tous ces problèmes, voici le mien pour la version 64 bits d'Eclipse Luna SR2 4.4.2: 1drv.ms/1GZhJPq - gardez à l'esprit les changements que j'ai mentionnés ci-dessus.)
BrainSlugs83
@ BrainSlugs83 Si vous pouviez a) publier le code sur github ou b) ajouter "." aux déclencheurs d'achèvement, ce serait génial.
lakemalcom
Pourquoi avez-vous utilisé à la 0x20place de ' '?
Fund Monica's Lawsuit
3

La barre d'espace a été une clé pour sélectionner la saisie semi-automatique même dans Indigo. À ma connaissance, cela ne peut pas être configuré. En fait, c'est probablement pourquoi le retard existe.

Je suggère de régler le délai sur une valeur optimale qui vous permet de taper des choses comme private void ...confortablement sans déclencher de suggestions pour privateet void. Ensuite, si vous recevez une suggestion parce que vous avez attendu trop longtemps, appuyez sur Échap pour abandonner Content Assist.

Herman
la source
Je n'ai eu qu'un succès limité en augmentant le délai.
Raedwald
0

Même configuration que davnicwil, même problème, toujours sur eclipse 4.4.

Solution : Interceptez (crochet) SHIFT + ESPACE (appuyez et maintenez) sur l'éclipse (fenêtre de l'éditeur) et remplacez-la par ESC, SPACE (séquence). Maintenant tu es mon choix entre

  • Saisie semi-automatique + ESPACE: appuyez sur ESPACE lorsque l'autosuggestion est présente
  • juste ESPACE: appuyez sur une combinaison de touches ou une séquence prédéfinie (par exemple SHIFT + ESPACE)

Sous Windows, vous pouvez utiliser http://www.heise.de/download/activaid.html (vous pouvez également utiliser AutoHotkey, hook natif java, ...)

Comment faire avec ActivAid:

  1. Ouvrez Ac'tivAid, sélectionnez "UserHotkeys"
  2. cliquez sur "+", définissez une description
  3. cliquez sur "raccourci", appuyez par exemple sur SHIFT + ESPACE
  4. Commande: "{ESC} {SPACE}" (sans guillemets)
  5. cliquez sur "+", sélectionnez le cadre de l'éditeur d'éclipse, appuyez sur ENTREE
  6. cliquez sur OK, OK dans Ac'tivAid

Mon fichier de configuration: activAid / settings / ac'tivAid.ini: [UserHotkeys]

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

Vous pouvez également remapper les touches sur les claviers non anglais avec des "HotStrings", par exemple ö -> {, ä->} etc.

user3178008
la source
0

Finalement travaillé.

Essayez de télécharger ce org.eclipse.jface.text.jar et copiez-le dans votre dossier plugin (généralement eclipse / plugin). N'oubliez pas de sauvegarder le vôtre.

Fonctionne sur Eclipse Juno.

Si le lien ne fonctionne pas, commentez-le, merci.

cy198706
la source
MARS1 Eclipse n'a pas pu être démarré, java.lang.RuntimeException: L'application "org.eclipse.ui.ide.workbench" n'a pas pu être trouvée dans le registre.
Tiina
-3

Vous pouvez désactiver l'activation automatique via la case à cocher dans

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

et activez la fonction de saisie semi-automatique à la demande. Le raccourci clavier par défaut pour cela est

CTRL+Space

Giskou
la source
3
Tout le problème est que je veux le comportement d'activation automatique, juste sans barre d'espace pour la saisie
semi
-3

Dans Eclipse, allez dans Fenêtre -> Préférences -> Général -> Clés et supprimez la liaison pour la commande Content Assist.

SpaceTrucker
la source
1
Cela supprimerait la possibilité d'afficher les suggestions en utilisant Ctrl + Espace. Ce que l'OP veut, c'est un moyen de désactiver la sélection d'une suggestion à l'aide de la barre d'espace. Aucune liaison de clé n'existe pour cela.
herman