O Emacs não pode competir com outro IDE se não tiver uma função de preenchimento automático. O preenchimento automático simplesmente me torna um programador mais eficiente. Conheço a extensão do modo de conclusão automática , mas ela não funciona com C ++.
Como posso obter um preenchimento automático inteligente e eficiente para C ++?
Esta pergunta foi originalmente feita por Malabarba na proposta da Área 51: Como obter a conclusão automática inteligente em C ++?
c++
completion
Lucas
fonte
fonte
Respostas:
Disclaimer: Eu sou o autor do modo ironia
Se você deseja apenas a conclusão automática inteligente, posso recomendar o modo ironia com a empresa ironia .
Outra ferramenta que ainda não foi citada é o emacs-ycmd .
fonte
irony-mode
clang_codeCompleteAt
uma TU analisada (mas alterações não salvas) levam de 3 a 5 segundos. Éirony-mode
mais rápido que isso?Veja meu guia . Ele lista vários métodos para preenchimento automático em C / C ++.
Essas opções são:
Usando Irony . Altamente recomendado, pois usa o Clang e fácil de configurar em comparação com outras soluções.
Usando o analisador embutido do Emacs. É o melhor preenchimento automático que você pode obter no analisador Emacs, Semantic, mas seria lento em grandes projetos como o kernel do Linux.
Usando
company-mode
pacote comcompany-clang
. Fornece excelente conclusão de código para os caminhos de inclusão do sistema, pois ele pode obter automaticamente os caminhos do Clang, mas precisa fazer alguma configuração para o local do projetoUsando
company-mode
comcompany-gtags
. Ele usa o banco de dados de tags gerado pelo GNU Global como conclusão. Você pode usar isso para fornecer código completo localmente para o seu projeto. Não é exatamente inteligente, pois lança tudo dentro do banco de dados gerado para você.rtags
vai além, fornecendo um servidor para análise ao vivo. Mas é complicado configurar a comparação com a solução pura Elisp.fonte
Eu tive um grande sucesso com a RTags + Company .
O RTags precisa de um daemon em
rdm
execução separado que use clang para conclusão de código, navegação de código e refatoração.rdm
também funciona como um banco de dados de símbolos, o que significa que o preenchimento automático é muito mais rápido do que qualquer solução que está chamando diretamenteclang_codeCompleteAt
.Rdm precisa de informações de sinalizadores de compilação para os seus projectos, que pode ser um incômodo, mas se você seguir o conselho do RTags página e links simbólicos
gcc-rtags-wrapper.sh
paragcc
,g++
,cc
ec++
rdm automaticamente é atualizado com novos sinalizadores de compilação sobre recompilação.fonte
Solução 1: modo da empresa + clang
O único problema é que você precisa informar ao modo da empresa onde procurar os arquivos de cabeçalho c / c ++ do seu projeto.
Se você usa o cmake, pode deixar https://github.com/redguardtoo/cpputils-cmake fazer a configuração para você (DICA: eu sou o autor do cpputils-cmake).
OU
Solução 2: modo empresa + gnu global
Nada mais a dizer, você precisa criar as tags com a ferramenta gnu global cli, como outros mencionaram.
fonte
Eu tenho usado o cmake-ide para configurar rtags, flycheck, irony e company-clang.
Agora você pode configurar seu sistema de compilação e seus plugins emacs de análise estática favoritos ao mesmo tempo!
EDIT: observe que o clang da empresa fornece preenchimentos automáticos, que era o recurso que você estava procurando. O cmake-ide também pode configurar o flycheck e rtags, o que adiciona vários outros recursos semelhantes ao IDE.
fonte
Mx modo semântico
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
&&
Tabelas de Tags
encontrar . -name "*. [chCH]" -print | etags -
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags , ctags - gera um arquivo de tags para o Emacs, vi
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=en
Conclusão do CMi (ou M-TAB) no ponto. Se o modo semântico estiver ativado, tente usar os dados do analisador semântico. Se o modo semântico estiver desativado ou falhar, tente concluir usando a tabela de tags selecionadas (consulte Tags)
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
M-. (find-tag) solicita o nome da tag && pula para a definição
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e
fonte