Emacs ne peut pas rivaliser avec un autre IDE s'il n'a pas de fonction d'achèvement automatique. L'auto-complétion fait simplement de moi un programmeur plus efficace. Je connais l’ extension Auto Complete Mode , mais elle ne fonctionne pas avec C ++.
Comment puis-je réaliser l'auto-complétion intelligente et efficace pour C ++?
Malabarba a posé cette question à l’origine sur la proposition de la zone 51: comment obtenir une complétion automatique intelligente en C ++?
c++
completion
Luke
la source
la source
Réponses:
Disclaimer: je suis l'auteur de irony-mode
Si vous souhaitez simplement une saisie automatique intelligente, je peux vous recommander le mode ironie avec l' entreprise ironique .
Un autre outil qui n'a pas encore été cité est emacs-ycmd .
la source
irony-mode
clang_codeCompleteAt
avec une TU analysée (mais les modifications non enregistrées) prennent entre 3 et 5 secondes. Est-ceirony-mode
plus rapide que cela?Vérifiez mon guide . Il répertorie plusieurs méthodes d’achèvement automatique en C / C ++.
Ces options sont:
Utiliser l' ironie . Fortement recommandé, car il utilise Clang et facile à installer par rapport à d’autres solutions.
Utilisation de l'analyseur intégré d'Emacs. C’est la meilleure méthode de saisie automatique que vous puissiez obtenir, elle provient de l’analyseur Emacs, Semantic, mais elle serait lente pour les grands projets comme le noyau Linux.
Utilisation de
company-mode
package aveccompany-clang
. Fournit l'achèvement du code pour les chemins d'inclusion système, car il peut automatiquement obtenir les chemins de Clang, mais doit effectuer une configuration pour le projet localUtiliser
company-mode
aveccompany-gtags
. Il utilise la base de données de balises générée à partir de GNU Global en tant que complétion. Vous pouvez l'utiliser pour fournir du code complet localement à votre projet. Ce n'est pas tout à fait intelligent car il vous envoie tout ce qui se trouve dans la base de données générée.rtags
va plus loin en fournissant un serveur pour l'analyse en direct. Mais la configuration est compliquée à comparer avec la solution pure Elisp.la source
J'ai eu beaucoup de succès avec RTags + Company .
RTags nécessite un démon distinct
rdm
qui utilise Clang pour l’achèvement du code, la navigation dans le code et le refactoring.rdm
fonctionne également comme une base de données de symboles, ce qui signifie que l'auto-complétion est beaucoup plus rapide que toute solution qui appelle directementclang_codeCompleteAt
.GMD a besoin d' information des drapeaux de compilation pour vos projets qui peuvent être un problème, mais si vous suivez les conseils de la GCTR la page et un lien symbolique
gcc-rtags-wrapper.sh
pourgcc
,g++
,cc
etc++
GMD est automatiquement mis à jour avec de nouvelles options de compilation sur recompilation.la source
Solution 1: mode entreprise + clang
Le seul problème est que vous devez indiquer au mode société où rechercher les fichiers d’en-tête c / c ++ de votre projet.
Si vous utilisez cmake, vous pouvez laisser https://github.com/redguardtoo/cpputils-cmake se charger de la configuration (astuce: je suis l'auteur de cpputils-cmake).
OU
Solution 2: mode entreprise + gnu global
Rien de plus à dire, vous devez créer les balises avec l’outil gnu global Cli, comme d’autres l'ont mentionné.
la source
J'utilise cmake-ide pour configurer rtags, flycheck, irony et company-clang.
Maintenant, vous pouvez configurer votre système de construction et vos plugins emacs d'analyse statique préférés en même temps!
EDIT: Notez que la société clang fournit des compléments automatiques, ce qui était la fonctionnalité que vous recherchiez. cmake-ide peut également configurer flycheck et rtags, ce qui ajoute plusieurs fonctionnalités supplémentaires similaires à IDE.
la source
Mode sémantique Mx
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
&&
Tableaux Tags
trouver . -name "*. [chCH]" -print | etags -
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags , ctags - génère un fichier de balises pour Emacs, vi
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=en
CMi (ou M-TAB) achèvement à point. Si le mode sémantique est activé, essaie d'utiliser les données de l'analyseur sémantique. Si le mode sémantique est désactivé ou échoue, tente de terminer à l'aide du tableau des balises sélectionnées (voir Balises).
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
M-. (find-tag) invite le nom de la balise && passe à la définition
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e
la source