Cela fait maintenant plus d'un an que j'essaie d'utiliser Emacs en tant qu'EDI C / C ++. Mon succès n’a été que marginalement jusqu’à présent, mais je me suis heurté à quelques murs de briques. Actuellement, j'essaie d'utiliser CEDET, mais j'ai du mal à comprendre comment l'utiliser efficacement.
Les fonctionnalités que je recherche dans un IDE sont les suivantes:
- Gestion de "projets" logiciels. Je souhaite que mon IDE ait une idée de tous les fichiers qui composent mon projet actuel afin de pouvoir exécuter des fonctions telles que la recherche et le remplacement dans mon projet. (Ce serait bien si je pouvais également y parvenir sans surcharger mon arbre source avec beaucoup de fichiers de support. Pourquoi ai-je besoin de plus d'un fichier de projet centralisé par projet?)
- La possibilité de construire le projet actuel à partir de l'EDI, quel que soit le tampon sur lequel je visite actuellement. Je dois être capable de lier une clé qui construira le projet actuel.
- Rapport d'erreur. Je ne veux pas avoir à lire plus de 500 lignes de sortie pour trouver les erreurs rapportées par les outils de construction. De préférence, les erreurs apparaissent dans leur propre tampon avec une ligne par erreur.
- Une prise de conscience des symboles dans le projet et où ils sont définis. Je souhaite accéder à une définition de symbole, qu'il soit dans les fichiers de mon projet ou dans les fichiers inclus du système.
- Débogage visuel. Je souhaite disposer d'une liste de surveillance des variables locales qui se mettent à jour automatiquement lorsque je parcours le code. Je veux être capable de définir des points d'arrêt dans le code pour voir quelle ligne de code sera exécutée ensuite.
Je sais que chacune de ces fonctionnalités existe parce que je les ai déjà utilisées à un moment ou à un autre en utilisant EDE, Semantic, GDB, etc. Le problème est que je n'ai jamais pu faire fonctionner toutes ces fonctionnalités en même temps. , car chaque pièce doit généralement être configurée par elle-même, et il s’agit en général de trop de travail pour déterminer comment les configurer toutes en même temps et les faire fonctionner ensemble.
Quelles sont les solutions pour transformer Emacs en un IDE C / C ++ complet? Devez-vous toujours tout configurer à la pièce ou existe-t-il un moyen de configurer toutes les fonctionnalités à la fois?
EDIT: Une bonne réponse à cette question ne doit pas nécessairement répondre aux cinq critères donnés. J'ai simplement fourni la liste pour donner une idée plus concrète du type de fonctionnalités que je veux voir avant de considérer un IDE comme "complet". Il est tout à fait possible que CEDET convienne, mais je n'ai pas encore trouvé de didacticiel pas à pas permettant de l'installer à partir de zéro.
Réponses:
Il existe différents niveaux "IDE-ness" pour différentes langues et, malheureusement, vous n'obtiendrez jamais toutes les fonctionnalités de l'IDE sans une configuration (si vous n'aimez pas configurer, vous ne devriez probablement pas utiliser Emacs). CEDET vise à être une solution complète qui couvre tous vos besoins pour les langues prises en charge, mais personnellement, je ne l’ai jamais fait fonctionner correctement; Au lieu de cela, j'utilise quelques paquets en tandem pour couvrir mes bases IDE. Je vais passer en revue vos points dans l’ordre, avec quelques solutions pour les différentes langues que je connais:
M-x compile
peuvent tout faire et permettent de retrouver facilement les erreurs (utilisation simplenext-error
). Vous pouvez facilement personnaliser projet par projet en utilisant des variables de répertoire à définircompile-command
. Vous pouvez exécutercompile
avec projectile usingprojectile-compile-project
(C-c p c
).M-x compile
a également couvert ici - les erreurs finissent généralement par une dans la*compilation*
mémoire tampon, avec pagination facile avecnext-error
.M-.
passer directement à la définition. Voici quelques paquets qui fournissent un support similaire pour d’autres langues: CIDER (for Clojure); SLIME (pour Common Lisp); robe (pour Ruby); balises sémantiques ou clang pour C / C ++ (disclaimer: je n'ai jamais utilisé non plus, donc je ne sais pas si elles fonctionnent bien). Si tout le reste échoue, vous pouvez également utiliser les installations TAGS intégrées d'Emacs en utilisant quelque chose comme des balises ctags exubérantes , mais je n'ai jamais obtenu de résultats aussi acceptables avec TAGS.la source
projectile
possible de s’intégrer directement à laperspective
créationperspective-per-project
automatique d’ un commutateur de projet.semantic
n ° 4, Sémantique est un bon paquet, il comprend votre code et peut faire beaucoup de choses utiles avec ces informations.semantic
, et je pense me souvenir qu'il dispose d'une prise en charge C ++ incomplète, mais je l'ai ajouté à la réponse.J'ai utilisé ce guide pour commencer à utiliser Emacs en tant qu'EDI C ++. Il présente Helm et Projectile qui aident à répondre à plusieurs de vos questions. En être témoin,
Projectile gère les projets. Il recherche dans l’arborescence des répertoires les fichiers Makefile, SConstruct, Git, SVN et peut-être un autre fichier de système de construction ou de contrôle de version pour connaître automatiquement les fichiers associés au projet en cours. Par exemple, les
C-c p h
exécutionshelm-projectile
qui utilisent Helm pour rechercher un fichier dans le projet en cours.Projectile peut construire vos projets.
C-c p c
exécuteprojectile-compile-project
qui essaie d’exécuter Make / SCons / CMake en fonction des fichiers disponibles. Je n'ai jamais eu à configurer cela; il a toujours su quoi faire.Les erreurs apparaissent dans leur propre tampon lorsque vous vous lancez,
projectile-compile-project
mais je ne suis pas sûr que ce soit aussi joli que vous le voudriez.Vous pouvez utiliser le paquet
helm-gtags
qui interface avec legtags
programme (que vous devriez avoir disponible sur votre système). Notez que gtags est un projet GNU et qu'il est donc peu probable qu'il fonctionne immédiatement sous Windows.Une fois configuré, Helm prend conscience des symboles du projet et peut naviguer dans les définitions et utiliser les emplacements. Par exemple, vous
helm-gtags-dwim
pouvez accéder à n'importe quelle utilisation d'une variable ou d'une fonction et, lorsqu'il est exécuté sur un fichier d'en-tête, ouvre ce fichier d'en-tête.Je n'ai pas encore essayé cela.
Le guide répertorié fournit des informations de configuration très explicites sur la façon de commencer.
la source
Puisque vous demandez maintenant un IDE complet en C / C ++, je pourrais être qualifié.
J'ai utilisé tous les IDE MS de vc4 à Visual Studio 2010, alors je comprends tout à fait ce que vous voulez.
La bonne nouvelle est qu’Emacs pourrait être à 95% aussi performant que Visual Studio et qu’il peut faire beaucoup plus. mais vous pourriez ne pas être intéressé par la partie "plus". Je me concentrerai donc uniquement sur vos questions.
Maintenant le point clé, vous devez utiliser CMake , même votre application C ++ est uniquement pour Windows! Fin de l'histoire. Pas d'autre choix, je sais de quoi je parle. Si vous n'utilisez pas CMake, il est inutile de continuer.
Réponse à la question 1 : Vous n'avez besoin de rien configurer, installez cpputils-cmake ( https://github.com/redguardtoo/cpputils-cmake ) pour configurer d'autres plugins. C'est encore plus pratique que Visual Studio. Donc, la configuration par projet n'est pas nécessaire. Pour remplacer la recherche, je combine la puissance de bash / perl / git et de percol ( https://github.com/mooz/percol ), ce qui est bien meilleur que n’importe quel IDE. consultez mon blog ( http://blog.binchen.org/categories/emacs.html ) et mon ~ / .bashrc ( https://gist.github.com/redguardtoo/01868d7a13817c9845e8#file-bashrc ). Par exemple, je peux rechercher remplacer les fichiers dans certains commit.
Réponse à la question 2 : C'est déjà configuré par cpputils-cmake, vous avez juste besoin,
M-x compile
comme d'habitude.Réponse à la question 3 : identique à la question 2. Je ne sais pas pourquoi c'est un problème. c'est exactement le même comportement que VS, avec de meilleures raccourcis clavier.
Réponse à la question 4 : Maintenant, la plupart des gens n'utilisent que Gnu Global, qui pourrait être combiné avec cpputils-cmake. Je comprends que le vrai problème est de détecter automatiquement les répertoires contenant tous les en-têtes C ++ inclus . Cela peut être fait avec cpputils-cmake, tout le reste est facile. S'il vous plaît
man global
en shell et lisez le manuel sur la variable d'environnement GTAGSLIBPATH. Il existe de nombreux plugins pour fournir une bonne UX basée sur Global pour la navigation de code, je recommande ggtags.elRéponse à la question 5 : Débogage visuel, beaucoup de gens ont recommandé
M-x gdb-many-window
, j'ai essayé mais cela n'a pas fonctionné. C'est simplement parce que ma version de gdb est obsolète (Hint, j'utilise OSX 10.7.3) et que je suis trop paresseux pour mettre à niveau mon système d'exploitation. Mais GUD va bien. Je crée une petite touche pour imprimer une variable pour moi dans la fenêtre d'édition. tout le matériel de débogage est utilisable. Il n'a pas de disposition de table UX en tant que VS. mais pour être honnête avec vous. Le débogueur Microsoft de Microsoft n’est pas non plus le meilleur au monde. DDD ( http://www.gnu.org/software/ddd/) est le meilleur débogueur convivial .) Gud et VS craignent tous les deux. Ces jours-ci, je viens d'insérer du code de connexion avec yasnippet, qui est un autre plug-in d'Emacs. Pour clarifier, je connais toutes les astuces avancées sur les points d'arrêt, c'est simplement parce que je suis trop paresseux pour appliquer ces astuces. Insérer du code de journalisation dans Emacs est beaucoup plus facile.Il y a beaucoup d'autres choses à propos d'IDE: l'achèvement du code? utilisez le mode entreprise, aucun besoin d'installation. vérification de la syntaxe en temps réel? utilisez cpputils-cmake, puis
(flymake-mode 1)
La meilleure chose à faire est que vous avez besoin de moins de configuration que de VS si vous utilisez ma configuration à ( https://github.com/redguardtoo/emacs.d ) Cette configuration a pour titre "Configuration emacs de Purcell plus support C / C ++" .
Maintenant, il y a quelque chose que je dois souligner, Emacs vous donne une totale liberté . Vous pouvez choisir n'importe quel moyen de commencer. manière difficile ou facile.
Le moyen le plus simple est simplement de copier ma configuration (ou celle de n’importe qui sur github, de compter les étoiles au début), vous obtiendrez un IDE C ++ entièrement fonctionnel en 5 minutes. VS n'a pas fini de démarrer dans ces 5 minutes.
La difficulté consiste à peaufiner la configuration à partir de rien. Si vous choisissez la voie difficile, ne vous plaignez pas Emacs . C'est ton choix.
BTW, à long terme, un peu de connaissances sur Emacs Lisp pourraient être utiles. Je pense que c'est trivial pour un développeur professionnel en C ++ comparé au temps que j'ai perdu sur MS sh * t. Il y a de nombreuses années, MS a mis à niveau silencieusement son environnement d'exécution VC dans certaines mises à jour Windows. Mon produit a fonctionné correctement sur les machines de la société, mais est tombé en panne sur les ordinateurs des clients .
Après cet incident, j'ai commencé à comprendre Richard Stallman.
la source
CMakeLists.txt
?Pour le n ° 4, je recommande fortement exuberant-ctags et le support des balises intégrées, que j'ai utilisé pendant des années. Alternativement, je viens tout récemment de passer à GNU Global et au paquet ggtags et je les ai trouvés légèrement supérieurs; bien qu'ils fonctionnent presque à l'identique. Les deux fonctionnent avec presque aucune configuration. Pour les autres fonctionnalités de l'IDE, j'aime aussi le package de saisie automatique. De même, j'utilise
M-x compile
beaucoup et lie les clés globales aux erreurs suivantes et précédentes. Pour chercher dans les "projets", je me sers généralementM-x find-grep
. Notez qu'il utilisera les mêmes raccourcis clavier pour l'erreur suivante et précédente.la source
Le projectile semble être la meilleure option pour la gestion de projet dans emacs. Il est extrêmement léger, vous n’avez pas besoin d’ajouter de fichier supplémentaire à votre projet. Il essaiera de détecter automatiquement les projets pour vous en fonction de la présence de certains fichiers spéciaux. Par exemple, si vous travaillez dans un dépôt git, projectile le traitera comme un projet (tous les fichiers suivis par git seront traités comme faisant partie du projet), vous pourrez alors utiliser les commandes
projectile-find-file
permettant d’ouvrir tous les fichiers du projet. Il a un tas d'autres commandes qui fonctionnent par projet.Flycheck prend en charge la vérification de la syntaxe à l'aide de clang / gcc.
Je vous recommande de jeter un oeil à rtags . Il utilise clang comme back-end et permet de passer rapidement à la définition et à l’achèvement. Cela peut également vous aider avec # 3 puisqu'il intègre également flymake pour afficher les erreurs et les avertissements à l'aide de clang. En outre, il bénéficie d'un soutien limité pour la refactorisation. Une autre option pour l'auto-complétion intelligente est le mode ironie
la source
La version CEDET actuellement livrée avec Emacs est difficile à installer, mais celle que vous pouvez obtenir sur le site officiel est plus facile à installer et pourrait répondre à vos besoins n ° 2 et n ° 4.
L'EDE de CEDET vous permet de gérer, par exemple, des projets makefile et automake, d'y ajouter des cibles et d'associer des fichiers à des cibles. Vous pouvez ensuite compiler votre projet en utilisant les commandes EDE. Comme il utilise le mode de compilation intégré d'Emacs, votre besoin # 3 est également satisfait.
La sémantique de CEDET possède des analyseurs syntaxiques pour plusieurs langages, dont le C ++. Il peut récupérer les balises définies dans un fichier, comme exuberant-ctags et GNU Global, mais il possède également des fonctionnalités précises de complétion automatique et de saut. Si vous avez deux méthodes appelées "foo", le saut de Semantic est suffisamment intelligent pour vous amener sur la bonne.
Pour le n ° 1, j'utilise personnellement projectile et j'ai utilisé avec succès GDB pour le n ° 5 il y a quelques temps.
Astuce pour # 3: Si EDE vous surpasse, Emacs a la commande
M-x recompile
pour lancer votre dernière commande de compilation, afin que vous puissiez exécuter votre compilation une première fois, puis l’utiliserrecompile
dans n’importe quel tampon.la source
Pour # 4, semble être un nouveau projet appelé YouCompleteme , et le client Emacs correspondant, qui semble être la prochaine bonne chose. Parce qu'il utilise clang, il a une meilleure vue du code que les balises ou global.
la source
J'ai été satisfait de CEDET depuis son dépôt source + BCE + gtags + cscope. Cela dit, je vais essayer de nombreuses suggestions sur ce post.
la source
Comme mentionné ci-dessus, le projectile (éventuellement avec barre) est une solution brillante pour la gestion de projet.
Ycmd est idéal pour compléter le code et une certaine navigation, et le meilleur client pour cela est emacs-ycmd (divulgation complète: j'ai écrit le client emacs.)
Pour les "tags" et l'indexation, la meilleure solution globale que j'ai trouvée est la recherche de code (plus de détails: j'ai aussi écrit celle-ci.) et cela fonctionne bien dans plusieurs langues.
la source