Eu sei que o emacs suporta conclusão de código. Mas, para ser sincero, nunca fui um bom leitor de perguntas frequentes, pelo menos para algo em que sou completamente novo. Então, eu me pergunto o que preciso fazer o download e como fazer para que o emacs possa fazer alguma conclusão inteligente de código para mim em C ++ e Java. Ou existe algum pacote que conclua o código para muitos dos principais idiomas?
20
complete.el
tentar uma biblioteca padrão . É muito antigo e pouco conhecido, mas o tipo de conclusão no buffer que ele fornece pode ser útil.M-x find-library complete
, leia o comentário no arquivo.A resposta de @ Doug está um pouco desatualizada e seu foco está na expansão de código usando trechos predefinidos.
Eu acho que a pergunta do OP é sobre intellisense (nome do método de preenchimento automático de uma classe, por exemplo).
Como o hippie expand costumava ser popular, o analisador de sintaxe é emacs tags . Portanto, ele suporta todos os idiomas suportados pelo ctags (incluindo C ++ , Java). Mas o resultado não é perfeito, porque ctags usa apenas expressão regular para analisar o código. Veja meu init-hippie-expand.el para detalhes. Você pode começar verificando o valor de
hippie-expand-try-functions-list
O preenchimento automático é moderno com uma interface de usuário sofisticada (menu suspenso, mesmo na janela do console). Se você usar o clang como back-end. O intellisense é muito melhor. Para que o clang funcione, você precisa instalar o auto-complete-clang, que é o plugin do auto-complete. Ele suporta apenas os idiomas que o clang suporta (C / C ++ / Obj-C). Como Sylvain Benner apontou, você pode usar o emacs-eclim como o back-end de análise de java que realmente chama o executável de eclipse. Portanto, o preenchimento automático pode suportar java. Veja meu init-auto-complete.el para detalhes.
semântica fornece a interface do usuário e o mecanismo de análise de back-end. É lento. A interface do usuário suspensa está OK, mas requer a janela X. O resultado do intellisense é melhor que ctags. E a documentação é muito nerd para mim. Veja init-semantic.el para detalhes.
O modo empresa é semelhante ao preenchimento automático, a diferença é que ele agrupa tudo em um único pacote. Por exemplo, os desenvolvedores de C ++ precisam apenas instalar o modo empresa (o preenchimento automático precisa de algum plug-in de terceiros). Outra diferença de interface do usuário é que a empresa mostrará o candidato automaticamente . Então você pressiona menos teclas na empresa. É possível fazer o mesmo no preenchimento automático após a personalização.
Em resumo, empresa de preenchimento automático, as duas opções mais populares. Semântica e expansão hippie também são bem-vindas, mas menos usadas. Outros são triviais demais para mencionar e seus recursos já estão cobertos pelos quatro grandes. Por exemplo, o preenchimento automático pode usar o yasnippet como fonte de entrada (o preenchimento automático fornece a interface do usuário, mas os candidatos reais são produzidos pelo back-end do yasnippet).
Sugiro usar o preenchimento automático ou a empresa como principal plug - in de conclusão de código e a expansão semântica ou hippie como plug-in complementar .
Eu uso o modo empresa e expansão hippie porque,
Agora (ano de 2017), o modo de empresa é mantido mais ativamente do que o preenchimento automático e possui mais plugins de terceiros (por exemplo, plug-in de látex)
O hippie-expand não é muito ativo, mas não ocupa a
TAB
chave que o modo da empresa / semântico / preenchimento automático está usandoSe você usar o modo de empresa para C ++ / Java, poderá modificar
company-backends
.Mais algumas dicas sobre o modo da empresa,
Você pode precisar ajustar o valor de
company-backends
. Por exemplo, suponha que seu valor seja(company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))
. Então, se vocêcompany-eclim
pode obter candidatos diferentes de zero,company
pensa que está escrevendo java, portanto, NÃO executará back-end depoiscompany-eclim
.Agora vejamos
(company-dabbrev-code company-gtags company-etags company-keywords)
. Todos esses quatro back-end serão usados juntos. Por exemplo, mesmo depois decompany-dabbrev-code
buscar candidatos diferentes de zero com êxito, os outros três back-end ainda são executados.No mundo real, muitas vezes é necessário reajustar a ordem dos back-end ou adicionar novos back-end (
company-rtags
por exemplo).fonte
Resposta curta: Não conheço nenhum para o emacs que seja útil para java. A expansão dinâmica não se importa com as bibliotecas no caminho da sua classe, ela não sabe nada sobre o código que você está digitando, só pode se expandir para o texto que já existe em um dos buffers. O JDE e o emacs-eclim tentam fornecer essa funcionalidade, mas pessoalmente não fiquei impressionado.
fonte
Resposta curta:
M-/
Resposta longa: RTFM :-)
fonte
C-h r
)C-h k M-/
?