Frage

ich in erster Linie vim / gvim als Editor verwenden, und freue mich auf eine Kombination aus lxr (Linux Cross Reference) bei Verwendung von und entweder cscope oder ctags die Kernel-Quelle zu erkunden. //ctags.sourceforge: Allerdings habe ich nicht immer entweder cscope oder

War es hilfreich?

Lösung

ctags ermöglicht zwei Funktionen: so dass Sie von Funktionsaufrufen an ihre Definitionen springen, und omni Abschluss. Das erste bedeutet, dass, wenn Sie über einen Aufruf einer Methode sind, schlagen g] oder CTRL-] an die Stelle springen, wo das Verfahren definiert oder implementiert. Das zweite Merkmal bedeutet, dass bei der Eingabe foo. oder foo->, und wenn foo ist eine Struktur, dann ein Popup-Menü mit Feld Fertigstellung wird angezeigt.

cscope hat auch das erste Merkmal - mit set cscopetag - aber nicht den letzten. Allerdings cscope zusätzlich bietet die Möglichkeit, zu jedem der Orte zu springen, wo eine Funktion auch genannt wird.

So so weit wie um eine Code-Basis Springen betrifft, so wird ctags immer nur Sie zu der Stelle führen, wo die Funktion implementiert ist, während cscope Sie zeigen kann, wo eine Funktion auch genannt wird.

Warum würden Sie einen über den anderen wählen? Nun, ich benutze beides. ctags ist einfacher einzurichten, schneller zu laufen, und wenn Sie nur über das Springen eine Art und Weise kümmern wird es Ihnen weniger Linien zeigen. Sie können einfach laufen :!ctags -R . und g] funktioniert einfach. Es ermöglicht auch, dass omni vollständige Sache.

Cscope ist für größere, unbekannte Code-Basen. Die Einrichtung ist ein Schmerz, weil cscope eine Datei mit einer Liste von Namen von Dateien muss zu analysieren. Auch in vim, standardmäßig gibt es keine Tastenbelegungen einrichten - müssen Sie :cscope blah blah manuell ausführen

.

die Faust Problem lösen ich ein Bash-Skript cscope_gen.sh haben, die wie folgt aussieht:

#!/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

Dies sucht nach Code, der mich interessiert, die cscope.files Liste erstellt und erstellt die Datenbank. So kann ich laufen kann. „: Cscope_gen.sh“ statt alle eingerichtet Schritte merken zu müssen

I Karte cscope Suche ctrl-Raum x 2 mit diesem Code-Schnipsel, die die anderen Beruhigungsmittel von cscope mildert:

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

Es gibt diese cscope_maps.vim Plugin , die eine Reihe von ähnlichen Bindungen einrichtet. Ich kann nie mehr, was alle Optionen bedeuten, so sind in der Regel ctrl-Raum bleiben.

So schließen: ctags ist einfacher einzurichten und meistens funktioniert ohne viel anderes zu tun, ist es wichtig, für omni-komplett zu. cscope bietet mehr Funktionen, wenn Sie eine große und meist unbekannte Code-Basis zu pflegen, erfordert aber mehr Beinarbeit.

Andere Tipps

ich in der gleichen Situation war vor einigen Monaten ...

Der Mangel an Präzision ctags ist ein Schmerz in einem .., und ich finde cscope viel besser für all Sachen im Zusammenhang Makros (und es gibt eine Reihe von Makros in dem Linux-Kernel) ..

über die Nutzung, das ist eigentlich einfach ... Sie nur cscope -R an der Wurzel des Kernels geben und dann haben Sie nichts bekommen zu kümmern .. (ich meine, wenn Sie nur zu erkunden, das ist perfekt .. ).

Dann werden die Tastenbelegungen alle auf Strg- \ (Sie können es neu zuordnen, wenn Sie Ctrl allergisch sind), können Sie in erster Linie s und g verwenden ....,

für den Kernel-Entwicklung, brauchte ich nicht so viel die Fertigstellung ....

Wie auch immer, geht für cscope, das ist viel bequemer, genau.

Hmm ... Sie sollten wahrscheinlich etags anstelle von ctags ...

Wenn Sie cscope verwenden, dann können Sie Aufrufketten sehen, das heißt, der diese Funktion aufruft und welche Funktionen bietet diese Funktion aufrufen?

Ich bin nicht sicher, ob dies mit getan werden kann etags / ctags ...

Das ist nur eine Funktion ... was ist die Datei herauszufinden, die eine bestimmte Funktion Definition enthält? Diese erhalten Sie nur in cscope.

ich beide cscope und etags, sie sind gut, sowohl für verschiedene Dinge, vor allem, wenn sie mit einer großen Code-Basis, wie der Linux-Kernel arbeiten. In der Tat begann ich mit cscope und etags, wenn ich mit dem Linux-Kernel / Xen zu arbeiten begann.

LXR ist nicht groß, weil Sie klicken müssen, gehen über das Netzwerk usw., während Sie die cscope und Tags Datenbanken auf dem Kernel-Code erstellen können und müssen nicht über das Netzwerk gehen (im Gegensatz zu LXR).

Nutzung global gtags vorschlagen. verwenden könnte vim Plugin gen_tags gtags mit vim zu integrieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top