ViM für Programmierer - Teil 1

(http://www.zdnet.de/magazin/39124907/vim-fuer-programmierer-teil-1.htm)

von Gastautor, 12. August 2004

Ein Editor besonders wegen seiner Komplexität geeignet für Programmierer. Vi ist allerdings nicht leicht zu bedienen und erfordert eine lange Einarbeitungszeit.

Wer als Entwickler auf einer UNIX-/Linux-Plattform arbeitet, hat sicher schon einmal mit Vi Bekanntschaft gemacht. Vi-Benutzer teilen sich in zwei Kategorien: diejenigen, die diesen Editor hassen und seine fingerbrechenden Tastenkombinationen und schwer zu merkenden Befehle verfluchen, und diejenigen, die seine Flexibilität und Leistungsfähigkeit schätzen.

Der Verfasser dieser Zeilen gehörte lange Zeit zur ersten Kategorie. Allerdings haben sich durch kontinuierliche Nutzung schrittweise die unter der kryptischen Oberfläche verborgenen Vorteile in punkto Geschwindigkeit und Leistungsfähigkeit herausgestellt. Dieser Artikel stellt seine persönliche Top Ten der Features vor, die ersten fünf in Teil 1, die übrigen fünf in Teil 2.

Bevor man mit dem Lesen fortfährt, sollte man auf seinem System eine funktionsfähige Kopie von ViM ("Vi iMproved") installieren. Binaries und Sourcecode findet man als Download auf vim.org[1].

Automatisches Einrücken

Das Wichtigste zuerst: den Code lesbar machen. Üblicherweise erreicht man dies durch die sorgfältige Verwendung von Einrückungen in Verbindung mit verschachtelten Codeblöcken. Beim Einrücken kann ViM dank der äußerst leistungsfähigen automatischen Einrückfunktion auf jeden Fall eine Hilfestellung bieten.

Zur Kontrolle der Einrückung des Codes gibt es zwei wichtige Variablen in ViM: tabstop und autoindent. Die erste steuert die Anzahl der Leerzeichen, die einem <tab> entsprechen. Wenn man möchte, dass ein <tab> zwei Leerzeichen entspricht, kann man den folgenden Befehl verwenden (ausgeführt im Befehlsmodus von vi):


:set tabstop=2

Wenn man jetzt die Tabulatortaste zum Einrücken drückt, bewegt ViM den Cursor zwei Schritte weiter.

Man kann ViM auch dazu bringen, Codeblöcke automatisch einzurücken, so dass man nie (oder zumindest fast nie) selbst die Tabulatortaste betätigen muss. Hierzu aktiviert man die automatische Einrückung:


:set autoindent

Mit dieser aktivierten Option rückt ViM automatisch jede neue Zeile genau so weit ein wie die vorhergehende Zeile. Wenn man also eine Schleife, einen Bedingungsblock oder irgendeine andere verschachtelte Struktur beginnt, wird dadurch sichergestellt, dass jede Codezeile an den darüber stehenden Zeilen ausgerichtet und korrekt eingerückt ist.

Normalerweise wird man es nicht bedauern, dieses Feature aktiviert zu haben. Falls es aber doch einmal stören sollte, zum Beispiel wenn man statt eines Programms einen Brief schreiben will, so dass ein Tabulator nicht mehr den Anfang eines Codeblocks markiert, kann man es mit dem folgenden Befehl wieder deaktivieren:


:set noautoindent

Man kennt ja all diese Windows-Editoren, die Scripts farbig markieren, so dass sie übersichtlicher werden. ViM kann das auch. Der Editor enthält ein äußerst leistungsfähiges Syntax-Highlighting-Modul, das die gängigsten Programmiersprachen wie Perl, PHP, JavaScript, HTML, XML und JSP unterstützt.

Zur Aktivierung des Syntax-Highlighting gibt man Folgendes ein:


:syntax enable

ViM erkennt den Dateityp automatisch und lädt das entsprechend Farbschema. Um das Syntax-Highlighting zu deaktivieren (weil es manchmal den Editor verlangsamt) verwendet man:


:syntax off

Falls das Farbschema nicht gefällt, kann man es individuell anpassen. ViM bringt hier eine Fertiglösung mit: eine Reihe von vorgefertigten Farbschemata, die man mit dem Befehl colorscheme wie folgt aktivieren kann:


:colorscheme elflord

Eine vollständige Liste der verfügbaren Farbschemata findet man im Unterverzeichnis colors/ des share-Verzeichnisses von ViM.

Als Nächstes geht es um die Interaktion mit anderen Dateien und die Handhabung von Zeilennummern.

Anzeige verknüpfter Dateien

Die meisten Programmierer dürften Code-Bibliotheken mit wieder verwendbaren Codeschnipseln anlegen, die aus größeren Scripts extrahiert wurden und bei Bedarf mit include() oder require()-Anweisungen wieder eingebunden werden. Aber was ist, wenn man ein Script öffnet, das man vor einigen Monaten geschrieben hat, und keine Ahnung mehr hat, worauf sich all die include()-Anweisungen am Anfang beziehen?

Mit ViM ist es kein Problem, dies herauszufinden. Falls sich am Anfang des Scripts etwa die folgende Codezeile findet


#include 

und man einen Blick auf mydefs.h werfen will um zu sehen, was die Datei enthält, platziert man einfach den ViM-Cursor unter den Dateinamen und gibt Folgendes ein:


gf

ViM sucht daraufhin die Datei im Suchpfad (eingerichtet über die Variable path) und zeigt sie sofort im Fenster an. Dies ist eine sehr nützliche Funktion, besonders wenn man es mit Anwendungen zu tun hat, die einen umfangreichen Code und viele interne Verknüpfungen aufweisen. ViM bringt einen leistungsfähigen Datei-Explorer mit, der das Finden und Öffnen von Dateien zur Bearbeitung deutlich erleichtert. Um zu sehen, wie das funktioniert, gibt man im ViM-Editor folgenden Befehl ein:


:edit .

Damit wird eine Dateiliste des aktuellen Verzeichnisses erstellt. Diese Dateiliste ist Teil eines einfachen, aber voll funktionsfähigen Dateimanagers, der in ViM integriert ist und sich hervorragend eignet, um schnell eine Datei in einem anderen Verzeichnis des Dateisystems zu suchen und zu öffnen (besonders wenn man sich über den genauen Dateinamen nicht hundertprozentig sicher ist).

Sobald der Dateimanager geöffnet ist, kann man mit den Pfeiltasten zwischen Dateien und Verzeichnissen navigieren und mit der Eingabetaste eine Datei zur Bearbeitung auswählen. Innerhalb des Datei-Explorers kann man mit der Taste "i" zwischen der Anzeige von Zeitstempeln und Daten hin- und herschalten, was sehr praktisch ist, wenn man die zuletzt bearbeitete Datei sucht.

Verwendung von Zeilennummern

Häufig enthalten die von einem Script erzeugten Fehlermeldungen Zeilennummern, die angeben, wo im Code der Fehler ausgelöst wurde. Standardmäßig zeigt ViM im Eingabemodus allerdings keine Zeilennummern an. Hierzu muss man den folgenden Befehl eingeben:


:set number

Dadurch fügt ViM vor jeder Zeile einer Datei eine Zeilennummer ein. Diese Funktion ist zum gleichzeitigen Testen und Debuggen von Code auf zwei Konsolen äußerst nützlich. So kann man schnell zu den "schadhaften" Codezeilen springen.

Um herauszufinden, welche Zeile einer Datei man gerade bearbeitet, gibt man <Strg>-g ein und wirft einen Blick auf die Statuszeile. Dort zeigt ViM eine Meldung an, die statistische Angaben zur Gesamtzahl der Zeilen der Datei sowie die aktuelle Zeilennummer enthält.

Selbst mit eingeschalteten Zeilennummern kann man sich die Benutzung der Tasten <Bild ↑> und <Bild ↓> häufig sparen, indem man die eingebauten Tastenkürzel von ViM verwendet um direkt in eine bestimmte Zeile des Scripts zu springen:

Die Anzeige der Zeilennummern schaltet man mit dem folgenden Befehl wieder aus:


:set nonumber

Dann wird alles wieder wie gehabt angezeigt.

Es gibt noch viel mehr Tricks, mit denen man effizienter programmieren kann: Arbeiten mit mehreren Fenstern, Dateivergleich, Mustersuche und Ersetzen. Teil 2 dieses Artikels wird diese Themen behandeln.

URLs in diesem Artikel:
[1] = http://www.vim.org/index.php