Como obter o preenchimento de código no emacs?

20

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?

starcorn
fonte

Respostas:

27

A maneira básica de trabalhar com qualquer tipo de buffer no emacs é a abreviação dinâmica usada ao pressionar M-/(aka alt+ /)

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

Para um preenchimento de código mais extenso, específico da linguagem para C ++ ou Java (ou outros), convém examinar um pacote de modelo ou trecho de código. Há alguns discutidos nesta pergunta relacionada no StackOverflow. Um que é comumente mencionado nessas discussões é o yasnippet - há uma demonstração de screencast nesta postagem em um blog do emacs .

Doug Harris
fonte
+1. Você também pode complete.eltentar 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.
Drew
21

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).

  1. 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 dehippie-expand-try-functions-list

  2. 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.

  3. 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.

  4. 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 TABchave que o modo da empresa / semântico / preenchimento automático está usando

Se 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-eclimpode obter candidatos diferentes de zero, companypensa que está escrevendo java, portanto, NÃO executará back-end depois company-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 de company-dabbrev-codebuscar 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-rtagspor exemplo).

Chen Bin
fonte
qual é o melhor pacote de preenchimento automático no Emacs 24 para látex?
doctorate
@doctorate Acho que você precisa usar o preenchimento automático e sua fonte emacswiki.org/emacs/AutoCompleteSources , mas sou programador em vez de usuário de látex, então é melhor verificar novamente na comunidade do Google e do Emacs, muitos acadêmicos .
chen bin
observe o modo empresa também suporta látex. Então eu sugiro empresa em vez de auto-complete
chen bin
2

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.

e-mail ausente
fonte
0

Resposta curta: M-/

Resposta longa: RTFM :-)

Gyom
fonte
6
+1, deus eu espero que a próxima pergunta que eu vejo é "necessidade de ajuda usando o comando RTFM"
rownage
@rownage: oh, isso é `` info-emacs-manual '' ( C-h r)
SamB
1
Que tal C-h k M-/?
Doug Harris