Question

Je l'utilise principalement vim / gvim comme éditeur et cherche à utiliser une combinaison de LXR (Cross Linux Référence) et soit cscope ou ctags pour explorer les sources du noyau. Cependant, je n'ai jamais utilisé soit cscope ou

Était-ce utile?

La solution

ctags permet deux fonctionnalités: vous permettant de passer d'appels de fonction à leurs définitions et omni achèvement. Le premier signifie que lorsque vous êtes sur un appel à une méthode, frapper ou g] CTRL-] sautera à l'endroit où cette méthode est définie ou mis en œuvre. La deuxième caractéristique signifie que lorsque vous tapez foo. ou foo->, et si foo est une structure, un menu contextuel avec l'achèvement du champ sera affiché.

cscope a également le premier long métrage - en utilisant set cscopetag - mais pas la dernière. Cependant cscope ajoute en outre la possibilité de sauter à l'un des endroits où une fonction est appelée ainsi.

Donc, pour autant que de sauter autour d'une base de code est concerné, ctags ne sera jamais vous conduire vers l'endroit où la fonction est mise en œuvre, alors que cscope peut vous montrer où une fonction est appelée aussi.

Pourquoi choisir l'un sur l'autre? Eh bien, je l'utilise à la fois. ctags est plus facile à mettre en place, plus rapide à courir et si vous ne vous préoccupez sauter d'une façon il vous montrera moins de lignes. Vous pouvez simplement exécuter :!ctags -R . et g] fonctionne exactement. Il permet aussi cette chose complète omni.

Cscope est idéal pour les grandes bases de code inconnu. La mise en place est une douleur parce que cscope a besoin d'un fichier contenant une liste de noms de fichiers à analyser. De plus en vim, par défaut, il n'y a pas de raccourcis clavier mis en place - vous devez exécuter manuellement :cscope blah blah

.

Pour résoudre le problème de poing que j'ai un cscope_gen.sh script bash qui ressemble à ceci:

#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp'  \
> cscope.files

# -b: just build
# -q: create inverted index
cscope -b -q

Ceci recherche code que je suis intéressé, crée la liste des cscope.files et crée la base de données. De cette façon, je peux courir. « : Cscope_gen.sh » au lieu d'avoir à se rappeler toutes les étapes mis en place

Recherche sur la carte Cscope ctrl-espace x 2 avec cet extrait, ce qui atténue l'autre point négatif de cscope:

nmap <C-@><C-@> :cs find s <C-R>=expand("<cword>")<CR><CR>

Il y a ce plugin cscope_maps.vim qui met en place un groupe de liaisons similaires. Je ne me souviens jamais ce que toutes les options signifient, alors tendance à coller à l'espace ctrl.

Pour conclure: ctags est plus facile à mettre en place et fonctionne la plupart du temps sans faire beaucoup d'autres choses, il est vital pour omni-complet aussi. cscope fournit plus de fonctionnalités si vous devez maintenir une grande et surtout la base de code inconnu, mais nécessite un travail plus jambe.

Autres conseils

Je suis dans la même situation il y a quelques mois ...

Le manque de précision de ctags est une douleur dans un .., et je trouve cscope beaucoup mieux pour toutes les macros choses liées (et il y a un tas de macros dans le noyau linux) ..

en ce qui concerne l'utilisation, c'est en fait simple ... vous tapez juste cscope-R à la racine de votre noyau et vous avez rien à craindre .. (je veux dire que si vous voulez juste explorer c'est parfait .. .)

Ensuite, les raccourcis clavier sont toutes basées sur Ctrl- \ (vous pouvez remapper si vous êtes allergique à Ctrl), vous utilisez principalement s et g ....,

Développement pour le noyau, je ne l'ai pas tellement besoin de l'achèvement ....

Quoi qu'il en soit, allez cscope, ce qui est beaucoup plus pratique, précis.

Hmm ... Vous devriez probablement utiliser etags au lieu de ctags ...

Si vous utilisez cscope, vous pouvez voir des chaînes d'appel, à savoir, qui appelle cette fonction et qui fonctionne le fait appel de fonction?

Je ne sais pas si cela peut être fait en utilisant etags / ctags ...

C'est juste une caractéristique ... Qu'en est-il de trouver le fichier qui contient une définition de fonction particulière? Ce que vous obtenez seulement cscope.

J'utilise à la fois cscope et etags, ils sont à la fois bon pour différentes choses, surtout quand on travaille avec une grande base de code, comme le noyau Linux. En fait, je commencé à utiliser cscope et etags quand je commencé à travailler avec le noyau Linux / Xen.

LXR est pas grande, parce que vous devez cliquer, allez sur le réseau, etc., alors que vous pouvez construire les Cscope et bases de données balises sur votre code noyau et ne doivent pas aller sur le réseau (contrairement à LXR).

Proposer utilisation gtags mondiale. Pourrait utiliser vim plug-in gen_tags pour intégrer gtags avec vim.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top