Impedir que o pressionamento de tecla da barra de espaço acione o preenchimento automático no Eclipse

86

Atualizar

Isso foi corrigido no Eclipse 2018-12 . Este comportamento ainda é o padrão, mas pode ser configurado como desativado - veja a resposta aceita para saber como

Vou deixar a questão como era para a posteridade, e para aqueles em versões anteriores do Eclipse


No Eclipse, habilitei sugestões de estilo intellisense para Java indo para

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

e definir o seguinte

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

fonte = Eclipse Intellisense?

Isso funciona de forma brilhante, exceto por um problema irritante. Quando eu pressiono spacebar, o token que está sendo digitado é preenchido automaticamente com o que estiver no topo da lista de sugestões. Muito justo, exceto que às vezes eu digito um nome de classe / variável com uma correspondência legal exata, mas isso não aparecerá como a principal sugestão. Então, quando eu naturalmente acerto, spacebarEclipse insere algo completamente errado.

EG, depois de digitar Cookie, vou clicar spacebare pegar CookieMonster.

Isso parece um bug e acontece com frequência o suficiente para ser irritante, mas mesmo apesar disso , não quero spacebaracionar o preenchimento automático em geral . Posso querer digitar um nome de variável que ainda não foi declarado ou algo semelhante. Quero usar o preenchimento automático como uma ferramenta auxiliar, mas minha digitação natural sempre deve ter prioridade sobre ela.

Eu gostaria de parar de spacebardisparar o autocomplete e voltar a usar enter, ou melhor ainda, acionar o autocomplete com uma customtecla não usada na digitação comum. Isso é possível?

Eu brinquei com todas as configurações do Content Assist sem sucesso. Pesquisar a pergunta no Google apenas retorna vários resultados sobre a desativação do recurso de preenchimento automático.


Este problema foi corrigido no Eclipse 2018-12 [4.10] veja a resposta aceita

Está presente em todas as versões anteriores, ou seja, 2018-09 [4.9], Photon [4.8], Oxygen [4.7], Neon [4.6], etc.

Davnicwil
fonte
+1 Eu estava lutando com o mesmo problema ... alguma sorte em resolver isso? É muito chato pressionar espaço e obter algo que você não queria (você não selecionou!) ... Isso pode ser bom para "Declaração de tipo", mas para "nomes de variáveis" não é razoável.
emgsilva
Infelizmente não. Você sabe se o mesmo problema existe na última versão do Kepler (4.3)? Ainda não fiz a atualização, mas atualizarei a pergunta
davnicwil
3
Infelizmente, esse mesmo comportamento ocorre no Kepler (4.3) ... É realmente uma pena. Gosto muito dessa ativação automática, mas é realmente irritante que ela faça essa seleção em várias situações. Minha solução temporária é aumentar ligeiramente o tempo de ativação, para que eu escreva a maior parte do nome da nova variável ... mas isso nem sempre funciona. Vou pesquisar um pouco mais sobre esse problema e provavelmente relatarei isso ao Eclipse, pois acho que é um bug, não um recurso.
emgsilva de
possível duplicata de stackoverflow.com/questions/7371618/… (indicando que Indigo também já se comportou assim)
herman
6
A julgar pelo número de votos positivos nesta questão e pela falta de votos positivos nas respostas, parece que o Eclipse precisa consertar isso!
andrewb

Respostas:

20

Eclipse 2018-12 já foi corrigido para isso!

Um patch para o Bug 348857 foi recentemente incorporado ao projeto Eclipse e lançado como parte do Eclipse 2018-12 . Você pode baixar essa versão aqui .

Agora você tem uma nova opção para desativar todos os gatilhos de inserção, exceto enter, o que impedirá o spacebarpreenchimento automático.

Basta ir para Preferências ... -> Java -> Editor -> Assistente de Conteúdo (ou Janela -> Preferências -> Java -> Editor -> Assistente de Conteúdo no Windows) e selecionar Desativar gatilhos de inserção, exceto 'Enter' , conforme mostrado no captura de tela abaixo: Desativar preferências de gatilhos de inserção

Pyves
fonte
1
Excelente, muito obrigado. Eu adicionei um título à sua resposta para que as pessoas vejam claramente que é para as versões atuais. Outras respostas estão desatualizadas.
callmebob
1
@Pyves Levei um tempo para aceitar esta resposta mais recente, desculpas, mas eu não uso mais o Eclipse e não cheguei a verificá-lo. De qualquer forma, sim, parece que isso resolveu definitivamente o problema e estou muito feliz que tenha sido resolvido mais de 6 anos depois!
davnicwil
Alguém está tendo um problema em que a supressão do gatilho não está funcionando dentro da visualização Debug Shell? Para mim, a barra de espaço está ativando o preenchimento automático. (Estou em junho de 2019)
William Dutton,
@William Dutton possivelmente algo para sinalizar em um relatório de bug separado.
Pyves de
26

Existe uma solução no rastreador de problemas para isso. Copie o jar na pasta eclipse / dropins. Com a próxima reinicialização, o espaço é desativado como gatilho de preenchimento automático.

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

Eclipse 12-2018 e mais recente: está funcionando nativamente, verifique a resposta de Pyves.

Pascalius
fonte
2
Parece incrível, mas ... não funciona para mim no Eclipse Juno - nenhuma mudança no comportamento, a barra de espaço ainda ativa o preenchimento automático. Isso está funcionando para você no Kepler? Onde estão os itens de botão / menu da barra de ferramentas para alternar a ferramenta mencionada no tópico de bug?
davnicwil
1
Sim, funciona para mim no Kepler Service Release 1. No entanto, também não vejo os itens da barra de ferramentas.
Pascalius
Isso não funciona para mim no Eclipse Luna SR2 (4.4.2 - Build Id: 20150219-0600).
BrainSlugs83,
Acabei de criar um plug-in bem rápido (abaixo na resposta de @AndrewXu sobre escrever plug-ins) que altera o comportamento no Eclipse Luna para aceitar apenas Tab e Enter como chaves de conclusão do intelli-sense.
BrainSlugs83
1
@Pascalius obrigado pela sua resposta que por muito tempo foi a melhor, mas agora o Eclipse corrigiu isso e tornou configurável nativamente. Isso foi apontado em uma resposta mais recente, então aceitei essa, pois agora é a melhor maneira de resolver o problema.
davnicwil
7

Use uma versão SDK do eclipse

1. Abra Plug-ins Visualize e encontre org.eclipse.jface.text, clique com o botão direito e escolha importar como Projeto de Origem. Após a importação, você o encontra em sua área de trabalho.

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

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

mudar para

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

3.Export org.eclipse.jface.text

Clique com o botão direito do mouse na pasta do projeto de org.eclipse.jface.text, escolha exportar -> Plug-ins e fragmentos implementáveis, em seguida, escolha o arquivo de destino e conclua. Substitua aquele no eclipse / plug-ins pelo que você gerou.

Andrew Xu
fonte
2
Para aqueles que estão se perguntando como abrir esta visualização, vá em "Janela" -> "Mostrar Visualização" -> "Outro ..." e na caixa de texto do filtro comece a digitar "plug" e selecione "Plug-ins" na caixa abaixo e pressione "OK".
BrainSlugs83
Além disso, se você está procurando uma experiência mais parecida com o Visual Studio, recomendo apenas comentar todo esse bloco (o bloco padrão), comentar o bloco '\ t' e, em seguida, encontrar o bloco que manipula '\ r' e '\ n' (logo acima desses dois), e adicionando '\ t' a ele. - Isso dará a você o preenchimento da guia. :-)
BrainSlugs83
(Para aqueles que não querem passar por todos esses problemas, aqui está o meu para a versão de 64 bits do Eclipse Luna SR2 4.4.2: 1drv.ms/1GZhJPq - tenha em mente as mudanças que mencionei acima.)
BrainSlugs83
@ BrainSlugs83 Se você pudesse a) postar o código no github ou b) adicionar "." para gatilhos de conclusão, isso seria incrível.
lakemalcom
Por que você usou em 0x20vez de ' '?
Processo de Fundo Monica
3

A barra de espaço tem sido a chave para selecionar o autocomplete, mesmo no Indigo. Até onde sei, isso não pode ser configurado. Na verdade, é provavelmente por isso que existe o atraso.

Eu sugiro definir o atraso para algum valor ideal que permite que você digite coisas como private void ... confortavelmente sem acionar sugestões para privatee void. Então, caso você receba uma sugestão porque esperou muito, pressione Escape para abortar o Assistente de Conteúdo.

Herman
fonte
Tive sucesso apenas limitado ao aumentar o atraso.
Raedwald
0

Mesma configuração que davnicwil, mesmo problema, ainda no eclipse 4.4.

Solução : Interceptar (gancho) SHIFT + SPACE (pressionar e segurar) no eclipse (janela do editor) e substituí-lo por ESC, SPACE (sequência). Agora você pode decidir entre

  • Autocomplete + ESPAÇO: pressione ESPAÇO quando a auto-sugestão estiver presente
  • apenas ESPAÇO: pressione a sequência ou combinação de teclas predefinidas (por exemplo, SHIFT + ESPAÇO)

No Windows, você pode usar http://www.heise.de/download/activaid.html (você também pode usar AutoHotkey, java native hook, ...)

HowTo com ActivAid:

  1. Abra o Ac'tivAid, selecione "UserHotkeys"
  2. clique em "+", defina uma descrição
  3. clique em "atalho", pressione, por exemplo, SHIFT + ESPAÇO
  4. Comando: "{ESC} {SPACE}" (sem aspas)
  5. clique em "+", selecione o quadro do editor eclipse e pressione ENTER
  6. clique em OK, OK em Ac'tivAid

Meu arquivo de configuração: activAid / settings / ac'tivAid.ini: [UserHotkeys]

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

Você também pode remapear as teclas em teclados diferentes do inglês com "HotStrings", por exemplo, ö -> {, ä->} etc.

user3178008
fonte
0

Finalmente resolvi isso.

Tente baixar este org.eclipse.jface.text.jar e copie-o para a pasta do plug-in (normalmente eclipse / plug-in). Não se esqueça de fazer o backup do seu próprio.

Funciona no Eclipse Juno.

Se o link não funcionar, comente sobre isso, obrigado.

cy198706
fonte
MARS1 Eclipse não pôde ser iniciado, java.lang.RuntimeException: O aplicativo "org.eclipse.ui.ide.workbench" não pôde ser localizado no registro.
Tiina
-3

Você pode desabilitar a ativação automática por meio da caixa de seleção em

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

e ative o recurso de preenchimento automático sob demanda. A tecla de atalho padrão para isso é

CTRL+Space

giskou
fonte
3
O problema todo é que eu quero o comportamento de ativação automática, apenas sem a barra de espaço fazendo o preenchimento automático
davnicwil
-3

No Eclipse, vá para Janela -> Preferências -> Geral -> Chaves e remova a ligação para o comando Assistência de Conteúdo.

SpaceTrucker
fonte
1
Isso removeria a possibilidade de exibir as sugestões usando ctrl + Espaço. O que o OP deseja é uma forma de desabilitar a seleção de uma sugestão usando a barra de espaço. Não existe ligação de chave para isso.
herman