Aaron Fischer Ingenieur, Vater, Heimwerker, Problemlöser

07 Dezember, 2009

Tag 8: Vim als IDE, Basics für C-Programmierung

TL;DR:

Um vernünftig programmieren zu können, brauchen wir natürlich eine professionelle IDE, die uns unterstützt und hilft. Unter Java ist das einfach, hier fällt die Wahl schnell auf Eclipse oder NetBeans, bei C sieht das schon etwas anders aus. Da es so viel Auswahl gibt, habe ich mich für Vim entschieden, da es auch außerhalb von C sehr nützlich ist, sich einmal mit diesem Editor beschäftigt zu haben.

Vim ist schon mehrere Jahrzehnte alt und stammt wiederum von einem anderen Editor ab. Doch bis heute ist und bleibt er der Standard (neben Emacs und Nano) auf jeder Linux-Kiste. Ich habe bereits mehrere Vim-Tipps und Tricks zusammengeschrieben, so dass ich hier keine große Einführung in den Editor geben will. Statt dessen will ich ein paar Tipps und Tricks für die Programmierung mit C aufzeigen, da wir das in den nächsten Tagen machen werden.

Ein sehr gutes Tutorial ist C editing with VIM von Siddharth Heroor. Das Dokument ist etwas alt, aber die Befehle sind so gut wie alle gleich geblieben. Ich werde hier nur eine kurze Zusammenfassung der wichtigsten Befehle geben, wer mehr wissen will kann sich gerne durch das oben erwähnte Tutorial durcharbeiten, es ist nicht all zu lang. Für diejenigen, die Vim zum ersten Mal verwenden sei der offizielle Vim-Tutor ans Herz gelegt. Einfach vimtutor auf der Console eingeben.

Konfiguration

Es gibt ein paar Regeln, die sich im Laufe der Jahre etabliert haben. Hierzu gehören, dass eine Zeile (C)-Code maximal 80 Zeichen lang sein darf. Dies hat den Vorteil, dass die Zeilen selbst nicht so kompliziert werden und man bei kleineren Displays nicht so viel scrollen muss. Natürlich sollte der Programmcode auch richtig eingerückt werden, dazu gibt es auch eine Option in Vim, um dies zu automatisieren (Einrückungen immer nur mit Leerzeichen, nicht mit Tabs). Schreibt folgende Optionen in eure .vimrc Datei:

set textwidth=80
set wrapwidth=60
set cindent

set number
set showmatch
set shiftwidth=2
set tabstop=2
set expandtab
set hlsearch

Bewegen

Die üblichen Navigationstasten sind hjkl (die Cursortasten gehen natürlich auch, sind aber nicht zu empfehlen, da man ständig die Hand von der Tastatur nehmen muss), doch für horizontale Bewegungen gibt es einfachere Wege: Mit w und b navigiert man Wortweise, mit ( und ) in ganzen Blöcken. Ein sehr tolles Feature ist %, mit dem man zum gegenüberliegenden Zeichen springen kann. Die gegenüberliegenden Zeichen sind meist Klammern in Funktionsaufrufen oder die geschweiften Klammern für Codeblöcke. Ist der Cursor auf einer öffnenden Klammer und % wird gedrückt, springt der Cursor zur passenden schließenden Klammer.

Sprünge im Programmcode

Sobald das Projekt aus mehr als einer Funktion oder einer Datei besteht ist man viel damit beschäftigt Dateien zu öffnen, zu Funktionen zu scrollen, wieder zu der Ursprungsstelle zu gehen, dort etwas zu editieren usw. Dies lässt sich mit dem Programm ctags und Vim etwas verbessern. Damit wir dieses Feature nutzen können, müssen wir zuerst folgendes aufrufen:

ctags-exuberant -R *.{c,h}

So werden alle Programmdateien eingelesen und analysiert. Heraus kommt eine Datei mit dem Namen tags, welche für jede Datei und Funktion im Programmcode deren Position speichert. (Dies wäre auch wieder ein toller Task für unser Makefile!) Steht der Cursor gerade über einem Funktionsaufruf und STRG + ] wird gedrückt, springt der Cursor direkt zur Funktionsdefinition. Mit STRG + t gehts wieder zurück. Also optimal um mal schnell zu schauen was die Funktion macht.

Ähnliches geht auch mit Variablen und deren Definitionen. Geht man über eine Variable und drückt gd, springt der Cursor direkt zur Definition. Mit dem * kann man allgemein das nächste Vorkommen des unter dem Cursor stehenden Wortes suchen.

Vervollständigung von Dateien, Funktionen und Variablen

Natürlich will keiner etwas doppelt schreiben. Deshalb lässt sich mit der Tastenkombination STRG + p den gerade getippten Anfang einer Variablen, einer Funktion oder einer Datei vervollständigen. Gibt es mehrere Möglichkeiten, wird ein Dropdown-Feld angezeigt aus dem man wählen kann. Für lokale Dateien verwendet man STRG +x, STRG +f.

Compilieren, Debuggen

Da wir schon ein Makefile angelegt haben, brauchen wir hier nicht mehr viel zu beachten. In Vim lässt sich make durch :make [task] aufrufen. Treten Fehler auf, springt Vim direkt zum Ersten und der Fehler wird in der Statuszeile angezeigt. Mit :cn und :cN kann man zwischen den Fehlern springen.

Hilfe zu Funktionen

Am Anfang steht man sehr häufig vor dem Problem, dass man nicht weiß, was eine entsprechende Funktion macht oder was für Parameter sie braucht. Alle C Funktionen und die Funktionen der Standardbibliotheken sind als Manual-Page schon im System. Ein Aufruf von man scanf ruft beispielsweise die Hilfeseite zur Funktion scanf auf. Mit info scanf erhält man einen mehr strukturierten Text, der evtl. für das Verständnis besser geeignet ist. Geht man in Vim mit dem Cursor über einen Funktionsnamen und drückt K (großes k), öffnet sich die gleiche Seite. Mit q, ENTER kommt man wieder zurück.

Dies sollte fürs Erste genügen. Natürlich kann man all das gezeigte nicht an einem Tag verinnerlichen und im Schlaf beherrschen, aber es gibt immer ein Tag 1, an dem man zu lernen beginnt, in dem man es einfach immer versucht anzuwenden. Vielleicht ist ja heute Dein Tag 1?

Übermorgen geht es dann wirklich ans Programmieren. Wir werden uns die Grafik Bibliothek SDL anschauen und uns ein kleines Grundgerüst bauen, auf dem wir dann weiter aufbauen können.