Como obter a conclusão de código no emacs?

18

Eu sei que o emacs suporta a conclusão de código. Mas, para ser honesto, nunca fui um bom leitor de FAQ, pelo menos para algo que sou completamente novo. Então, eu me pergunto o que eu preciso fazer o download e como fazer isso, então o emacs pode fazer algum preenchimento de código inteligente para mim em C ++ e Java. Ou existe algum pacote que conclua o código para muitos dos principais idiomas?

    
por starcorn 10.01.2011 / 16:52

4 respostas

22

A maneira básica de trabalhar com qualquer tipo de buffer no emacs é a abreviação dinâmica usada pressionando M-/ ( também conhecido como alt + / )

Isso expandirá o texto para duplicar outras strings já existentes em seu buffer atual ou em outros buffers atualmente abertos.

Para um preenchimento de código mais extenso que seja específico do idioma para C ++ ou Java (ou outros), você desejará examinar um pacote de código ou pacote de códigos. Há alguns discutidos em esta questão relacionada no StackOverflow . Uma que é comumente mencionada nessas discussões é yasnippet - há uma demonstração de screencast em esta postagem em um blog do emacs .

    
por 10.01.2011 / 17:28
19

@ A resposta de Doug está um pouco desatualizada e seu foco está na expansão de código usando snippets pré-definidos.

Eu acho que a pergunta do OP é sobre o intellisense (nome do método auto complete de uma classe, por exemplo).

  1. expansão hippie costumava ser popular, o analisador de sintaxe é tags emacs . Por isso, suporta todas as linguagens ctags suporta (incluindo C + +, Java). Mas o resultado não é perfeito porque as ctags usam apenas expressões regulares 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

  2. O
  3. auto-complete é moderno e conta com interface de usuário sofisticada (menu suspenso, até mesmo na janela do console). Se você usar o clang como back-end. O intellisense é muito melhor. Para que o clang funcione, é necessário instalar o auto-complete-clang, que é o plug-in do preenchimento automático. Suporta apenas os suportes de linguagem (C / C ++ / Obj-C). Como Sylvain Benner apontou, você pode usar emacs-eclim como o back-end de análise java que na verdade chama o executável do eclipse. Portanto, o preenchimento automático pode suportar o java. Veja meu init-auto-complete.el para detalhes.

  4. semântica fornece a interface do usuário e o mecanismo de análise de back-end. É lento. A interface do usuário suspensa é OK, mas requer uma janela X. O resultado intellisense é melhor que o ctags. E a documenação é muito nerd para mim. Veja init-semantic.el para detalhes.

  5. o modo de empresa é semelhante ao preenchimento automático, a diferença é que agrupa tudo em um agrupar. Por exemplo, os desenvolvedores de C ++ só precisam instalar o modo de empresa (o preenchimento automático precisa de algum plug-in de terceiros). Outra diferença da interface do usuário é que a empresa mostrará o candidato automaticamente . Então você pressiona menos chaves na companhia. É possível fazer a mesma coisa no preenchimento automático após a personalização.

Em resumo, a empresa de auto-completar é a mais popular entre as duas opções. Semantic e hippie-expand também são bem-vindas, mas menos utilizadas. Outros são muito triviais para mencionar e suas características já são cobertas 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 preenchimento automático ou empresa como o principal plug-in de complementação de código e semântico ou hippie-expand como plug-in complementar .

Eu uso o modo de empresa e o hippie-expand porque

  • Agora (ano de 2017) o modo de empresa é mais ativamente mantido do que o preenchimento automático e tem mais plug-ins de terceiros (por exemplo, o plug-in do latex)

  • O hippie-expand não é muito ativo, mas não ocupa a tecla TAB que o modo de empresa / semântico / auto-completo está usando

Se você usar o modo de empresa para C ++ / Java, poderá modificar company-backends .

Mais algumas dicas sobre o modo de 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)) . Em seguida, se company-eclim puder obter candidatos diferentes de zero, company pensa que você está escrevendo java, portanto, ele NÃO executará back-ends após company-eclim .

Agora vamos ver (company-dabbrev-code company-gtags company-etags company-keywords) . Todos esses quatro backends serão usados juntos. Por exemplo, mesmo após company-dabbrev-code ter buscado candidatos diferentes de zero, os outros três backends ainda são executados.

No mundo real, geralmente é necessário reajustar a ordem dos back-ends ou adicionar um novo back-end ( company-rtags , por exemplo).

    
por 05.01.2013 / 07:10
2

Resposta curta: não conheço nenhum para emacs que é útil para java. A expansão dinâmica não se importa com as bibliotecas no seu caminho de classe, ela não sabe nada sobre o código que você está digitando, ele só pode expandir para o texto que já existe em um dos buffers. JDE e emacs-eclim tentam fornecer essa funcionalidade, mas pessoalmente eu não fiquei impressionado.

    
por 19.02.2011 / 17:40
0

Resposta curta: M-/

Resposta longa: RTFM: -)

    
por 10.01.2011 / 17:00

Tags