112 votes

Tags pour Emacs: Relation entre les etags, ebrowse, cscope, GNU Global et les ctags exubérants

Je travaille sur des projets C++, et je suis passé par Alex Ott guide CEDET et d'autres threads sur les tags dans StackOverflow, mais je suis encore confus sur la façon Emacs interfaces avec ces différents balise systèmes pour faciliter l'auto-complétion, la recherche de définitions, de la navigation de la base de code source ou de la prévisualisation de la doc-chaînes.

  1. Quelle est la différence (par exemple en termes de fonctionnalités) entre etags, ebrowse, exuberant ctags, cscope, GNU Global et GTags? Que dois-je faire pour les utiliser dans Emacs?

  2. Ai-je besoin d'sémantique/sénateur (CEDET) si je veux utiliser les balises de navigation/saisie semi-automatique des symboles?

  3. Ce n'sémantique apporter à la table sur le dessus de ces différents balise utilitaires? Comment fonctionne l'interface avec ces outils?

73voto

Bozhidar Batsov Points 23298

C'est une bonne question que j'ai récemment lu ici, je vais donc essayer d'expliquer la différence plus en détail:

Point 1:

etags et ctags à la fois de générer un index (un.k.un. tag/TAGS) fichier de langue des objets trouvés dans les fichiers source qui permet à ces éléments de manière à être facilement et rapidement localisé par un éditeur de texte ou un autre utilitaire. Une étiquette indique un langage objet pour lequel une entrée d'index est disponible (ou, à défaut, l'entrée d'index créé pour cet objet). Les balises générées par ctags sont plus riches en termes de métadonnées, mais Emacs ne peut pas interpréter les données supplémentaires de toute façon, donc vous devriez les considérer comme plus ou moins le même (le principal avantage de l' ctags serait son soutien de plusieurs langues). La principale utilisation pour les tags des fichiers est à la recherche de classe/méthode/fonction/constante/etc déclaration/définitions.

cscope est beaucoup plus puissante bête (au moins dans la mesure du C/C++ et Java sont concernés). Alors qu'il fonctionne sur plus ou moins le même principe (génération d'un fichier de métadonnées utiles), il vous permet de faire des choses plus comme trouver toutes les références à un symbole, voir où une fonction est appelée, etc (vous pouvez trouver des définitions).

Pour résumer:

ctags permet de naviguer à la déclaration du symbole/définitions (ce que certains appellent une à une voie de recherche). ctags est d'un usage général, outil utile pour de nombreuses langues.

Sur l'autre main (comme mentionné sur la page du projet) cscope vous permet de:

  • Aller à la déclaration d'un symbole
  • Afficher un choix de la liste de toutes les références à un symbole
  • Recherchez la définition globale
  • Les fonctions appelées par la fonction
  • Les fonctions de l'appel d'une fonction
  • Rechercher une chaîne de texte
  • Recherche pour un modèle d'expression régulière
  • Trouver un fichier
  • Trouver tous les fichiers dont un fichier

Il devrait venir en tant qu'aucune surprise à quelqu'un à ce point que, quand je traite avec des projets C/C++ je fais un usage intensif de cscope et des soins de très peu de choses sur ctags. Lorsque vous traitez avec d'autres langues, la situation serait évidemment être inversé.

Point 2.

Intelligente d'auto-complétion vous avez besoin d'un vrai code source de l'analyseur (sémantique), sinon vous ne connaissez pas le type de l'objet (par exemple) dans vos applications et les méthodes qui peuvent être invoquées. Vous pouvez avoir une saisie semi-automatique basée sur de nombreuses sources différentes, mais pour obtenir les meilleurs résultats, vous aurez besoin d'un analyseur. En va de même pour la coloration syntaxique - actuellement la coloration syntaxique dans Emacs modes majeurs est simplement basée sur les expressions régulières, ce qui est très fragile et sujette à erreurs. Espérons que, avec l'intégration de la sémantique dans Emacs 23.2 (il a utilisé pour être un package externe avant que) nous allons commencer à voir plus d'utilisations pour elle (comme l'utilisation d'analyser un tampon code source de bien le mettre en surbrillance)

Depuis Emacs 24.1 sémantique est utilisable à partir d'Emacs achèvement cadre. La façon la plus simple de tester, il est pour ouvrir un fichier de code source C et en tapant M-TAB ou C-M-i et regarder sémantique termine automatiquement pour vous. Pour les langues où sémantique n'est pas activé par défaut, vous pouvez ajouter la ligne suivante à votre mode majeur crochet de choix:

(add-to-list 'completion-at-point-functions 'semantic-completion-at-point-function)

Point 3.

sémantique apporte la véritable code de sensibilisation (pour les quelques langues, il prend actuellement en charge) et comble le fossé entre les Ide et Emacs. Il n'a pas vraiment d'interface avec des outils comme etags et cscope, mais cela ne signifie pas que vous ne pouvez pas les utiliser ensemble.

Espérons que mes explications sens et sera utile pour vous.

P. S. je ne suis pas assez familier avec global et ebrowse, mais si la mémoire me sert de l'usage de etags.

46voto

shigio Points 206

Je vais essayer d'ajouter quelques explications à 1.

Quel est-il?

  • Les Etags est une commande pour générer des "BALISES" du fichier, qui est le fichier de balises pour Emacs. Vous pouvez utiliser le fichier avec les etags.el qui fait partie d'emacs paquet.
  • Ctags est une commande pour générer des "balises" du fichier, qui est le fichier de balises pour vi. Maintenant Exuberant Ctags peut générer des "BALISES" fichier par l'option-e, et le soutien 41 langages de programmation.
  • Cscope est un tout-en-un code source d'un outil de navigation pour le langage C. Il dispose d'une amende de CUI (caractère de l'interface utilisateur) et la balise de bases de données (cscope.dans.hors, cscope.hors, cscope.po.out). Vous pouvez utiliser cscope de Emacs à l'aide de xcscope.el qui fait partie de cscope paquet.
  • GNU MONDIALE est une source code système de marquage. Bien qu'il soit semblable à outils ci-dessus, elle en diffère au point de qu'il est dépendant à partir de n'importe quel éditeur, et il n'a pas d'interface utilisateur, sauf pour la ligne de commande. Gtags est une commande pour générer les fichiers de balises pour le MONDIAL (GTAGS, GRTAGS, GPATH). Vous pouvez utiliser MONDIALE de emacs à l'aide de gtags.el qui fait partie du package GLOBAL. En plus de cela, il y a beaucoup de elisp bibliothèques (xgtags.el, ggtags.el, rien de gtags.el, barre-gtags.el, etc).

Comparaison

  • Ctags et les etags traiter uniquement des définitions. Cscope et GNU MONDIAL de traiter non seulement des définitions, mais aussi des références.
  • Ctags et les etags utiliser un plat balise de texte fichier. Cscope et GNU GLOBAL, l'utilisation de la clé-valeur de la balise de bases de données.
  • Cscope et GNU MONDIAL ont un grep comme moteur de recherche et de mise à jour incrémentale de la facilité de fichiers de balises.

Combinaison

Vous pouvez combiner Exuberant Ctags de la richesse de la langue de support et de GNU MONDIALE de la base de données facilité par l'utilisation de ctags comme un plug-in de l'analyseur de MONDIAL.

Essayez ce qui suit: (nécessite MONDIAL-6.0, Exuberant Ctags-5.5 ou version ultérieure, respectivement)

Bâtiment GNU MONDIALE:

$ ./configure --with-exuberant-ctags=/usr/local/bin/ctags
$ sudo make install

Utilisation:

$ export GTAGSCONF=/usr/local/share/gtags/gtags.conf
$ export GTAGSLABEL=ctags
$ gtags                     # invokes Exuberant Ctags internally
$ emacs -f gtags-mode       # load gtags.el

(Cependant, vous ne pouvez pas traiter les références par cette méthode, car ctags ne traitons pas les références.)

Vous pouvez également utiliser cscope en tant que client de GNU MONDIALE. GLOBAL package inclut une commande nommée "gtags-cscope', qui est un port de cscope, qui est, il est cscope lui-même, sauf qu'il utiliser le moteur de recherche au lieu de cscope.

$ gtags-cscope          # this is GLOBAL version of cscope

Avec les combinaisons, vous pouvez utiliser cscope 41 langues.

Bonne chance!

3voto

Clément B. Points 31

Je n'ai même pas vérifié, mais selon CEDET manuel (http://www.randomsample.de/cedetdocs/common/cedet/CScope.html):

sémantique pouvez utiliser CScope comme un back-end pour les recherches de base de données. Pour l'activer, utilisez:

 (semanticdb-enable-cscope-databases)

Cela permettra à l'utilisation de cscope pour tous les C et C++ tampons.

CScope sera ensuite utilisé pour l'ensemble du projet de recherche sous forme d'une sauvegarde en cas de pré-existants sémantique recherches de base de données peut ne pas avoir analysé l'ensemble de vos fichiers.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X