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.