Vim als IDE

Vim bietet bereits von sich aus vieles, was eine gute IDE (Integrated Development Environment) ausmacht. Aber eben nicht alles, so fehlen z.B. eine Projektverwaltung, eine Software-Versions-Kontrolle oder ein integrierter Debugger. Durch externe Programme und durch Plugins (Skripten) können fehlende Features nachgerüstet werden.

An dieser Stelle soll ein grober Überblick darüber gegeben werden, was Vim in Hinblick auf eine IDE bereits kann und welche Skripten es gibt, um aus Vim eine „richtige“ und den eigenen Ansprüchen entsprechende IDE zu machen.

Was Vim bietet

Hier ist eine Liste der interessantesten Features, die Vim für Programmierer bereitstellt. In Klammern steht, wo in der Vim-Dokumentation weitere Informationen zur jeweiligen Funktionalität gefunden werden können.

  • Folding (:help folding)
  • Syntax-Highlighting (:help syntax)
  • automatisches Einrücken, Indenting ( :help indent.txt )
  • erweiterte Suchfunktionen
    • Suche in aktueller Datei einschließlich der inkludierten Dateien (:help include-search)
    • Suche nach lokalen und globalen Identifiern (:help gd; :help gD)
    • Suche über mehrere Dateien hinweg (:help grep; :help quickfix)
  • dateiübergreifendes Ersetzen (:help argdo; Kapitel „Repeating – Making a change in many files“)
  • Schnittstelle zum Compiler (:help make; :help quickfix)
  • Sessionsmanagment (:help views-sessions)
  • Schnittstelle zu ctags und cscope (:help ctags; :help cscope)
  • Vervollständigung von Variablen- und Funktionsnamen (:help new-omni-completion; für C/C++ siehe :help omnicppcomplete)
  • Funktionsparameter anzeigen ( :help preview-window)
  • Navigieren im Source-Code (:help tags; :help various-motions)
  • Undo/Redo (:help undo-commands)
  • Macros (:help repeating)
  • Editieren/Anzeigen mehrerer Dateien gleichzeitig (:help windows)

Weitere Infos bieten die Kapitel „Moving through programs“ und „Editing programs“ in der Vim-Dokumentation.

Tools

Nachfolgend sind einige der von mir am häufigsten benutzten externen Tools aufgeführt.

Tools
ctagsDieses Tool erstellt aus dem zu analysierenden Quell-Code eine Datenbank anhand derer Vim zu Funktionen, Variablen, Strukturen usw. navigieren kann und Auto-Vervollständigung ausführen kann.
Plattformen: Linux, Windows, und viele andere
Quelle: Es gibt viel verschiedene Implementierungen. Eine der leistungsfähigsten ist Exuberant Ctags.
cscopeDieses Tool findet im Gegensatz zu ctags nicht nur nur wo etwas definiert/deklariert ist, sondern auch wo etwas verwendet wird.
Plattformen: Unixe + Windows (cygwin)
Quelle: zur Homepage
grepGrep ist ein sehr mächtiges Tool zur Suche in Textdateien. Seit Version 7 von Vim ist eine Variante dieses Tool in Vim integriert, siehe :help vimgrep.

Plattformen: Linux, Windows, und viele andere
Quelle: Es gibt viel verschiedene Implementierungen. Eine der verbreitesten ist die GNU-Version.
GNU grep für Linux: zur Homepage
GNU grep für Windows: zur Homepage

 Skripten

IDE
cEine IDE für C/C++, die u.a. das Übersetzen und Starten des Projekts erlaubt.
Autor: Fritz Mehner
Quelle: Vim Online
Projektverwaltung
projectStellt eine Projektverwaltung zur Verfügung. Das Projekt kann hierarchisch - unabhängig von der Verzeichnisstruktur - gegliedert werden. Es können außerdem mehrere Projekte gleichzeitig verwaltet werden. Der Wechsel zwischen verschiedenen Projekten ist so sehr schnell möglich.
Autor: Aric Blumer
Quelle: Vim Online
winmanagerBietet neben den Fenstern, in denen der eigentliche Source-Code bearbeitet wird, zwei weitere Fenster an. Einen File-Explorer und einen Puffer-Explorer. Der Puffer-Explorer wird automatisch beim Laden/Schließen von Dateien upgedated. Über den File-Explorer können z.B. weitere Dateien eines Projekts geladen werden.

Man kann winmanager als eine Art Projektverwaltung verstehen, allerdings läßt sich das Projekt nicht wie bei project hierarchisch gliedern sondern nur auf Dateiebene. Der Nachteil: Man sieht nur ein Verzeichnis gleichzeitig und alle Dateien, die sich in diesem Verzeichnis befinden, egal ob sie Teil des Projekts sind oder nicht.

Ich persönlich bevorzuge inzwischen die Kombination project und bufexplorer gegenüber winmanager.
Autor: Srinath Avadhanula
Quelle: Vim Online
Source-Code-Verwaltung
vcscommand.vimErmöglicht das Steuern von CVS, SVN, SVK, git, hg und bzr von Vim heraus.
Autor: Bob Hiestand
Quelle: Vim Online
Integration Debugger
gdbvimIntegriert den gdb in Vim.
Autor: Tomas Zellerin
Quelle: Vim Online
idevimIntegriert den gdb in Vim.
Autor: K T Lighish
Quelle: Vim Online
Puffernavigation
bufexplorerDas Skript listet die geöffneten Puffer auf und ermöglicht den komfortablen Wechsel zwischen verschiedenen Puffern.
Autor: Jeff Lanzarotta
Quelle: Vim Online
minibufexplAlle Puffer werden in einem ständig geöffneten Fenster kompakt dargestellt.
Autor: Bindu Wavell
Quelle: Vim Online
Source-Code-Browser
tagexplorerListet die Dateien des aktuellen Verzeichnisses auf. Für diese Dateien kann eine nach Variablen, Klassen, Strukturen, Funktionen usw. gruppierte Tag-Liste erstellt werden.
Benötigt exuberant ctags
Autor: Yegappan Lakshmanan
Quelle: Vim Online
tagmenuDie Definitionen einer Source-Code-Datei werden gruppiert nach Variablen, Klassen, Strukturen, Funktionen, Makros usw. in einem Menü aufgelistet.
Benötigt exuberant ctags
Autor: Yegappan Lakshmanan
Quelle: Vim Online
taglistListet die Definitionen einer Source-Code-Datei gruppiert nach Variablen, Klassen, Strukturen, Funktionen, Makros usw. in einem separaten Fenster auf. Bietet darüber hinaus noch weitere Features wie z.B. Anzeige des Prototyps, automatisches Updaten der Tag-Liste beim Öffnen neuer Dateien...
Benötigt exuberant ctags
Autor: Yegappan Lakshmanan
Quelle: Vim Online
Sonstiges
aErmöglicht schnellen Wechsel zwischen Code-Datei und der dazugehörigen Header-Datei.
Autor: Mike Sharpe
Quelle: Vim Online
calendarKalender, damit man den Abgabetermin für die neue Software näher rücken sieht 😉
Autor: Yasuhiro Matsumoto
Quelle: Vim Online
markDieses Plugin erlaubt das Markieren verschiedener Wörter in verschiedenen Farben. Dies ist sehr hilfreich, um z.B. einen schnellen Überblick zu erhalten, wo welche Variable oder Funktion verwendet wird.
Autor: Yuheng Xie
Quelle: Vim Online
VisualMarkErlaubt das Setzen und Anspringen von Bookmarks, die als solche markiert sind.
Autor: Brian Wang
Quelle: Vim Online