Linux-Magazin-Logo Die Zeitschrift für Linux-Professionals

Software entwickeln unter Linux

Weitsprung-Meister

Michael Schilli

Komfortabel von Funktion zu Funktion hüpfen - das bleibt nicht nur Nutzern großer grafischer IDEs vorbehalten. Das Ctags-Utility hilft dem Editor »vi« auf die Sprünge, damit Entwickler in Riesenprojekten blitzschnell die Definition einer Funktion, eines Makros oder einer Datenstruktur nachschlagen können.

Inhalt

104 Feder-Lesen
Tcl-Erweiterungen selbst entwickeln ist leichter, als viele Programmierer denken. Wenige Zeilen C genügen, schon ist eine zeitkritische Funktion oder eine Hardware-nahe Routine implementiert.

110 Perl-Snapshot
Ein MP3-Player mit GTK-GUI spielt zur Stimmungslage passende Lieder aus der privaten Sammlung. Dank Perl Object Environment läuft alles fließend ab.

115 Coffee-Shop
Internationalisierung - kurz I18n - sorgt für mehrsprachige GUIs, die sich auch bei Maßeinheiten und anderen Sprachspezifika an die Konventionen halten.

Große Softwareprojekte umfassen tausende Files in tiefen Verzeichnishierarchien. Darin stecken globale und lokale Include-Dateien sowie Bibliotheks- und Programmsourcen. Oft klärt erst langes Suchen, in welchem File eine Funktion definiert ist. Nutzer voluminöser IDEs wie Eclipse[1] haben es gut: Per Mausklick springen sie von einem Codestück, das eine Funktion benutzt, direkt zur Definition dieser Routine. Gleiches gilt für Makros und Datenstrukturen.

Wer den Klassiker »vi«[2] zusammen mit Ctags[3] nutzt, darf diesen Komfort ebenso spüren. Vorbereitend muss er nur ein Tags-File anlegen. Folgendes Kommando durchforstet den Dateibaum unter »project1« rekursiv nach Sourcedateien und legt im File »ctags.project1« einen Index für alle gefundenen Funktionen, Definitionen und Strukturen an:

ctags -R -f ctags.project1 project1

Ctags unterstützt viele Sprachen, von C und C++ über Java und Perl bis Python ist alles Wichtige dabei.

Tags im »vi« nutzen

Den Index nutzt »vi«, um zwischen den Files zu navigieren. Der Anwender muss nur die Tags-Datei laden. Dazu gibt er im »vi«-Kommandomodus Folgendes ein:

:set tags=ctags.project1

Nun genügt es, den Cursor auf ein Konstrukt zu setzen und Steuerung+] zu drücken - auf deutschen Tastaturen [Strg]+[AltGr]+[9] (wer eine US-Tastatur besitzt, hat es leichter[4]). Schon springt »vi« zur Definition des Konstrukts, eventuell in eine andere Datei, auch wenn sie in einer fernen Verzeichnishierarchie liegt. Bei mehreren Treffern klappert das Kommando »:tn« weitere Dateien ab.

In Abbildung 1 steht der Cursor auf der Funktion »JS_DefineObject()« in der Datei »jsmath.c« aus Mozillas Javascript-Engine Spidermonkey[5]. Ein kurzes Steuerung+] führt den Benutzer zur Definition nach »jsapi.c« (Abbildung 2). Setzt er dort den Cursor auf die C-Struktur »JSContext«, führt ihn ein weiteres Steuerung+] in den Header »jscntxt.h«. Mit [Strg]+[T] wandert er schrittweise zurück zum Ausgangspunkt der Reise.

Abbildung 1: Diese Codestelle in »jsmath.c« benutzt »JS_DefineObject()«. Um die Definition der Funktion zu finden, drückt der Benutzer Steuerung+].

Abbildung 2: Per Tastenkommando landet der Programmierer an der gesuchten Stelle in der Quelldatei »jsapi.c«. Den Rückweg findet er bequem mit [Strg]+[T].

Mehrere Tag-Files nutzen

Statt nur einer Ctags-Datei verkraftet »vi« auch mehrere gleichzeitig, wenn sie durch Kommas getrennt in der »vi«-Variablen »tags« stehen. Am geschicktesten setzt man die Variable in der Initialisierungsdatei »~/.vimrc«:

set tags=/home/mschilli/ctags.project1,/home/mschilli/ctags.project2

Ein Cronjob, der jede Nacht die Ctags aktualisiert, sorgt dafür, dass Entwickler am Morgen unbeschwert in ihren Projekten herumfahren können. (fjl)

Infos

[1] Eclipse: [http://www.eclipse.org]

[2] Vim: [http://www.vim.org]

[3] Ctags: [http://ctags.sourceforge.net]

[4] Joachim Wuttke, "Deutsch-amerikanische Freundschaft": Linux-Magazin 10/03, S. 87

[5] Spidermonkey: [http://www.mozilla.org/js/spidermonkey/]