Há mais de um ano, eu uso o Emacs como um IDE C / C ++. Até agora, tive apenas um sucesso marginal, mas encontrei algumas paredes de tijolos ao longo do caminho. Atualmente, estou tentando usar o CEDET, mas estou tendo dificuldades para entender como usá-lo de forma eficaz.
Os recursos que estou procurando em um IDE são os seguintes:
- Gerenciamento de "projetos" de software. Quero que meu IDE tenha uma noção de todos os arquivos que compõem meu projeto atual, para que eu possa executar funções como pesquisar e substituir dentro do meu projeto. (Seria bom se eu também pudesse conseguir isso sem encher minha árvore de origem com muitos arquivos de suporte. Por que preciso de mais de um arquivo de projeto centralizado por projeto?)
- A capacidade de criar o projeto atual a partir do IDE, independentemente do buffer que estou visitando no momento. Eu preciso ser capaz de vincular uma chave que criará o projeto atual.
- Relatório de erros. Não quero ter que ler mais de 500 linhas de saída para encontrar os erros que foram relatados pelas ferramentas de compilação. De preferência, os erros aparecem em seu próprio buffer com uma linha por erro.
- Uma conscientização dos símbolos dentro do projeto e onde eles são definidos. Quero pular para uma definição de símbolo, esteja ele nos meus arquivos de projeto ou nos arquivos de inclusão do sistema.
- Depuração visual. Quero ter uma lista de observação de variáveis locais que são atualizadas automaticamente à medida que passo no código. Eu quero poder definir pontos de interrupção no código, ver qual linha de código será executada a seguir.
Sei que cada um desses recursos existe porque já trabalhei cada um deles usando EDE, Semântica, GDB, etc. O problema é que nunca consegui ter todos esses recursos funcionando ao mesmo tempo. , porque cada peça geralmente precisa ser configurada sozinha e geralmente é muito trabalho descobrir como configurar todas elas de uma vez e fazê-las trabalhar juntas.
Quais soluções existem para transformar o Emacs em um IDE C / C ++ completo? Você sempre precisa configurar tudo aos poucos ou existe uma maneira de configurar todos os recursos de cada vez?
EDIT: uma boa resposta a esta pergunta não precisa atender exatamente todos os cinco dos critérios fornecidos. Simplesmente forneci a lista para fornecer uma idéia mais concreta do tipo de recursos que gostaria de ver antes de considerar um IDE "completo". É bem possível que o CEDET se encaixe na conta, mas ainda preciso encontrar um tutorial passo a passo sobre como configurá-lo do zero.
Respostas:
Existem diferentes níveis de "IDE-ness" para diferentes idiomas e, infelizmente, você nunca obterá recursos completos do IDE sem alguma configuração (se você não gosta de configurar as coisas, provavelmente não deve usar o Emacs). O CEDET pretende ser uma solução completa que cubra todas as suas necessidades de idiomas suportados, mas pessoalmente nunca o fiz funcionar corretamente; em vez disso, uso alguns pacotes em conjunto para cobrir minhas bases de IDE. Analisarei seus pontos em ordem, com algumas soluções para diferentes idiomas que eu conheço:
M-x compile
podem acomodar praticamente qualquer coisa e facilita a paginação através de erros (basta usarnext-error
). Você pode personalizar facilmente por projeto usando variáveis de diretório para definircompile-command
. Você pode executarcompile
com projétil usandoprojectile-compile-project
(C-c p c
).M-x compile
você também abordou aqui - os erros geralmente terminam um por linha no*compilation*
buffer, com paginação fácil comnext-error
.M-.
pular para a definição. Aqui estão alguns pacotes que fornecem suporte semelhante para outros idiomas: CIDER (para Clojure); SLIME (para Common Lisp); roupão (para Ruby); tags semânticas ou clang para C / C ++ (exoneração de responsabilidade: eu também nunca usei, por isso não faço ideia se elas funcionam bem). Se tudo mais falhar, você também pode usar as instalações TAGS integradas do Emacs usando algo como ctags exuberantes , mas nunca tive resultados próximos nem aceitáveis com o TAGS.fonte
projectile
pode ser integrado diretamente com aperspective
criação de umperspective-per-project
switch automaticamente no projeto.semantic
# 4, a semântica é um ótimo pacote, ele entende o seu código e pode fazer muitas coisas úteis com essas informações.semantic
e acho que me lembro que ele tem suporte incompleto ao C ++, mas o adicionei à resposta.Usei este guia para começar a usar o Emacs como um IDE C ++. Ele apresenta o Helm and Projectile, que ajuda a responder várias perguntas. A saber,
Projétil gerencia projetos. Ele procura na árvore de diretórios um Makefile, SConstruct, Git repo, SVN repo e talvez outros sistemas de compilação ou arquivos de controle de versão para aprender automaticamente quais arquivos estão associados ao projeto atual. Como exemplo,
C-c p h
é executado ohelm-projectile
que usa o Helm para encontrar um arquivo no projeto atual.Projétil pode construir seus projetos.
C-c p c
execuçõesprojectile-compile-project
que tentam executar Make / SCons / CMake com base nos arquivos disponíveis. Eu nunca tive que configurar isso; sempre soube o que fazer.Os erros aparecem em seu próprio buffer quando você executa,
projectile-compile-project
mas não tenho certeza se é tão bonito quanto você gostaria.Você pode usar o pacote
helm-gtags
que faz interface com ogtags
programa (que você deve ter disponível no seu sistema). Observe que o gtags é um projeto GNU e, portanto, é improvável que funcione imediatamente no Windows.Uma vez configurado, o Helm reconhece os símbolos no projeto e pode navegar para definições e usar locais. Por exemplo,
helm-gtags-dwim
pode pular para qualquer uso de uma variável ou função e, quando executado em um arquivo de cabeçalho, abre esse arquivo de cabeçalho.Ainda não tentei isso.
O guia listado fornece informações de configuração muito explícitas sobre como começar.
fonte
Como você está solicitando um IDE C / C ++ com todos os recursos agora, posso estar qualificado.
Eu usei todos os MS IDEs do vc4 para o Visual Studio 2010, então entendo perfeitamente o que você deseja.
A boa notícia é que o Emacs pode ser 95% tão bom quanto o Visual Studio e pode fazer muito mais. mas você pode não estar interessado na parte "mais". Então, vou me concentrar apenas nas suas perguntas.
Agora, o ponto principal, você DEVE USAR o CMake , até mesmo seu aplicativo C ++ é apenas para Windows! Fim da história. Não tenho outra escolha, eu sei do que estou falando. Se você não usa o CMake, não faz sentido continuar.
Resposta à pergunta 1 : Você não precisa configurar nada, instale o cpputils-cmake ( https://github.com/redguardtoo/cpputils-cmake ) que configura outros plugins. É ainda mais conveniente que o Visual Studio. Portanto, por configuração do projeto não é necessário. Para a busca substituir coisa, eu combino o poder do bash / perl / git e percol ( https://github.com/mooz/percol ), que é muito melhor do que qualquer IDE. verifique meu blog ( http://blog.binchen.org/categories/emacs.html ) e meu ~ / .bashrc ( https://gist.github.com/redguardtoo/01868d7a13817c9845e8#file-bashrc ). Por exemplo, posso procurar substituir os arquivos em determinadas confirmações.
Resposta à pergunta 2 : Já está configurado pelo cpputils-cmake, você só precisa
M-x compile
como de costume.Resposta à pergunta 3 : igual à pergunta 2. Não sei por que isso é um problema. é exatamente o mesmo comportamento do VS, com melhores combinações de teclas.
Resposta à pergunta 4 : Agora, a maioria das pessoas usa o Gnu Global, que pode ser combinado com o cpputils-cmake. Entendo que o problema real é detectar os diretórios que contêm todos os cabeçalhos C ++ incluídos automaticamente . Isso pode ser feito com cpputils-cmake, tudo o resto é fácil. Por favor,
man global
no shell e leia o manual sobre a variável de ambiente GTAGSLIBPATH. Existem muitos plugins para fornecer um bom UX baseado em Global para navegação de código, eu recomendo o ggtags.elResposta à pergunta 5 : Depuração visual, muitas pessoas recomendaram
M-x gdb-many-window
, eu tentei, mas não funcionou. É simplesmente porque minha versão do gdb está desatualizada (Dica, estou usando o OSX 10.7.3) e tenho preguiça de atualizar o meu sistema operacional. Mas o GUD está bem. Eu crio uma tecla curta para imprimir a variável para mim na janela do editor. todo o material de depuração é utilizável. Ele não possui o layout da tabela UX como VS. mas para ser sincero com você. O depurador UX da Microsoft também não é o melhor do mundo. O melhor depurador amigável é o DDD ( http://www.gnu.org/software/ddd/) Gud e VS são péssimos nessa questão. Atualmente, apenas insiro o código de log com o yasnippet, que é outro plug-in do Emacs. Para esclarecer, conheço todos os truques avançados sobre pontos de interrupção, é apenas porque tenho preguiça de aplicar esses truques. Inserir código de registro no Emacs é muito mais fácil.Há muito mais coisas sobre o IDE: conclusão de código? use o modo empresa, sem necessidade de configuração. verificação de sintaxe em tempo real? use cpputils-cmake, então
(flymake-mode 1)
O melhor é que você precisa fazer menos configurações que o VS se usar minha configuração em ( https://github.com/redguardtoo/emacs.d ) Essa configuração possui o título "configuração do emacs do purcell mais suporte para C / C ++" .
Agora há algo que eu preciso enfatizar: o Emacs oferece total liberdade . Você pode escolher qualquer maneira de começar. maneira difícil ou fácil.
A maneira mais fácil é apenas copiar minha configuração (ou a configuração de qualquer pessoa no github, conte as estrelas primeiro), em 5 minutos você terá um IDE C ++ totalmente funcional. O VS não terminou a inicialização nesses 5 minutos.
A maneira mais difícil é ajustar a configuração do zero. Se você escolher o caminho mais difícil, não reclame o Emacs . É a sua escolha.
BTW, a longo prazo, um pouco de conhecimento do Emacs Lisp pode ser útil. Eu acho que é trivial para um desenvolvedor profissional de C ++ comparar o tempo que perdi no MS sh * t. Muitos anos atrás, a MS atualizou silenciosamente o tempo de execução do VC em algumas atualizações do Windows. Isso fez meu produto funcionar bem nas máquinas da empresa, mas travou nos computadores dos clientes .
Após esse incidente, comecei a entender Richard Stallman.
fonte
CMakeLists.txt
?Para o número 4, recomendo exuberant-ctags e o suporte a tags interno, que eu uso há anos. Como alternativa, recentemente mudei para o GNU Global e o pacote ggtags e os achei um pouco superiores; embora, eles funcionem quase de forma idêntica. Ambos trabalham com quase nenhuma configuração. Para outros recursos do IDE, também gosto do pacote de preenchimento automático. Da mesma forma, uso
M-x compile
extensivamente e vinculo chaves globais ao erro seguinte e anterior. Para pesquisar em "projetos", geralmente apenas usoM-x find-grep
. Observe que ele usará as mesmas ligações de teclas para o erro seguinte e anterior.fonte
O projétil parece ser a melhor opção para gerenciamento de projetos no emacs. É extremamente leve, você não precisa adicionar nenhum arquivo extra ao seu projeto. Ele tentará detectar automaticamente projetos para você com base na presença de determinados arquivos especiais. Por exemplo - se você estiver trabalhando em um repositório git, o projétil o tratará como um projeto (todos os arquivos rastreados pelo git serão tratados como parte do projeto), então você poderá usar comandos como
projectile-find-file
abrir qualquer arquivo do projeto. Ele tem vários outros comandos que operam com base no projeto.O Flycheck tem suporte para verificar a sintaxe usando o clang / gcc.
Eu recomendaria que você desse uma olhada nas rtags . Ele usa o clang como um back-end e um bom trabalho de ir para a definição e conclusão. Também pode ajudá-lo com o número 3, pois também se integra ao flymake para exibir erros e avisos usando o clang. Além disso, possui algum suporte limitado para refatoração. Outra opção para o preenchimento automático inteligente é o modo ironia
fonte
A versão CEDET atualmente fornecida com o Emacs é difícil de configurar, mas a que você pode acessar no site oficial é mais fácil de configurar e pode responder às suas necessidades # 2 e # 4.
O EDE do CEDET permite gerenciar, por exemplo, makefile e automatizar projetos, adicionando destinos a ele e associando arquivos a destinos. Você pode então compilar seu projeto usando os comandos EDE. Como ele usa o modo de compilação interno do Emacs, sua necessidade nº 3 também é satisfeita.
A Semântica do CEDET possui analisadores para vários idiomas, incluindo C ++. Ele pode recuperar as tags definidas em um arquivo, como exuberant-ctags e GNU Global, mas também possui recursos precisos de preenchimento automático e salto. Se você tem dois métodos chamados "foo", o salto de Semantic é inteligente o suficiente para levá-lo ao caminho certo.
Para o número 1, eu pessoalmente uso projétil e usei com êxito o GDB para o número 5 algumas vezes atrás.
Dica para o 3: se o EDE é um exagero para você, o Emacs tem o comando
M-x recompile
para iniciar seu último comando de compilação, para que você possa executar sua compilação pela primeira vez e usá-lorecompile
em qualquer buffer.fonte
Para a # 4, parece ser um novo projeto chamado YouCompleteme , e o cliente Emacs correspondente, que parece ser a próxima coisa interessante. Por usar clang, ele tem uma visão melhor do código do que tags ou global.
fonte
Fiquei feliz com o CEDET de seu repositório de origem + BCE + gtags + cscope. Dito isto, há muitas sugestões neste post que tentarei.
fonte
Como foi mencionado nas partes acima, o projétil (opcionalmente com leme) é uma solução brilhante para o gerenciamento de projetos.
O Ycmd é ótimo para conclusão de código e alguma navegação, e o melhor cliente para ele é o emacs-ycmd (divulgação completa: escrevi para o cliente emacs).
Para "tags" e indexação, a melhor solução geral que encontrei é a pesquisa de código (mais divulgação: também escrevi esta). É bastante estúpido o fato de realmente fazer pesquisa regex, mas é extremamente rápido e geralmente tudo o que você precisa , e funciona bem em vários idiomas.
fonte