Integration von Code-Editor und Source Code Management

Git in Vim einbinden und nutzen

| Autor / Redakteur: Mirco Lang / Stephan Augsten

Mit Vim-Fugitive lassen sich Git-Änderungen direkt aus dem Vim-Editor heraus vornehmen.
Mit Vim-Fugitive lassen sich Git-Änderungen direkt aus dem Vim-Editor heraus vornehmen. (Bild: Lang / Vim)

Es gibt Dutzende guter Code-Editoren, aber mit Ausnahme von Emacs ist kaum einer so etabliert wie Vim. Auch Git ist allgegenwärtig und da lohnt es sich, Vim ein wenig zu pimpen. Mit ein paar Basics und einigen Plug-ins wie Vim-Fugitive bekommen Sie Ihre persönliche IDE.

Vim-Artikel sollten eigentlich immer mit ein paar Grundlagen anfangen, denn die Erfahrung zeigt: Die meisten Nutzer werden eher zu Vim (Vi Improved) genötigt – etwa weil er als einziger und Standardeditor „plötzlich“ auftaucht und Nutzer vor das klassische Vim-Problem stellt: Wie beendet man das Teil?

Viele Nutzer sind dann für immer, nun, eben keine Nutzer mehr. Und Vim nur ab und an zu nutzen funktioniert auch nicht, dafür ist die Bedienung zu eigenständig und in großen Teilen völlig unintuitiv. Wenn die Einarbeitung aber erst einmal vorüber ist, gibt es kein effizienteres Werkzeug.

Daher ganz kurz ein, zwei Basics: Grundlage von Vim ist das Bedienkonzept über Modi. Befindet man sich im Edit-Modus, kann man fröhlich drauf los editieren wie man es gewohnt ist – wenn auch mit einer sehr eigenen Navigation. In diesen Editiermodus gelangen sie mit der Taste „I“.

Im Befehlsmodus werden hingegen Befehle wie Suchen, Ersetzen, Speichern und auch Beenden ausgeführt. Über „ESC“ kommen Sie in den Befehlsmodus, wo Sie Befehle mit einem Doppelpunkt einleiten. Und um es gleich vorweg zu nehmen: „:wq“ speichert (write) und beendet (quit) Vim, „:q!“ beendet ohne zu speichern.

Bereits ohne Erweiterungen lässt sich Git aus Vim heraus nutzen, drei Dinge sind hier interessant: Erstens lässt sich in Vim eine Shell/ein Terminalfenster öffnen: Per „:term“ oder auch „:term bash“ gelangen Sie auf einen ganz normales Terminalfenster, das oberhalb der in Vim geöffneten Datei erscheint, etwa zum Ausführen von „git status“. Hier können Sie wie gewohnt arbeiten – und die in Vim geöffnete Datei sogar bearbeiten.

Der Terminal lässt sich wie immer via „exit“ beenden. Dadurch landen Sie im Vim-Befehlsmodus, wo sie das inaktive, aber noch zu sehende In-Vim-Terminalfenster mittels „:q“ schließen. Sofern Sie die aktuelle Datei im Terminal bearbeitet haben, etwa einen Patch hinzugefügt, müssen Sie sie noch neu laden, um die Änderungen zu bekommen, was mit „:e“ (für edit) funktioniert.

Zweitens können Sie auch direkt aus Vim Befehle ausführen und deren Ausgabe an der Curser-Position einfügen: Zum Beispiel ...

:read !echo Hallo Welt

... oder ...

:read !git show b08b04d | grep Author

..., um den Autoren eines Commits einzufügen.

Drittens lässt sich die aktuelle Datei auch direkt ausführen, was beim Entwickeln von Skripten enorm praktisch ist – Coden und Testen direkt aus dem Editor heraus, wie man es von großen IDEs gewohnt ist. Schon mit diesen drei Features lässt sich wunderbar mit Git arbeiten. Eine Änderung committen? Ganz klar:

:! git commit -am "Mein Commit"

… , dafür muss man den Editor nicht verlassen. Aber es geht einfacher.

Vim erweitern

Vim-Fugitive mit Vorschau- und Hilfefenster.
Vim-Fugitive mit Vorschau- und Hilfefenster. (Bild: Lang / Vim)

Den größten Sprung nach vorn machen Sie sicherlich mit der Erweiterung Vim-Fugitive. Der Git-Wrapper bringt die Git-Befehle direkt in Vim und zeigt auch die Ausgaben in einem internen Vorschaufenster. Die Installation unter Ubuntu läuft über den Paketmanager mit „sudo apt-get install vim-fugitive“.

Zum Testen öffnen Sie einfach eine versionierte Datei in Vim und versuchen Sie es mit „:Gstatus“, um eine hübsche Ausgabe von „git status“ zu bekommen. Anschließend genügt ein „g?“, um eine Hilfe anzuzeigen. Mit „q“ beziehungsweise „:q“ schließen Sie die „Fenster“ wieder.

Ein ganz simpler, typischer Workflow könnte etwa so aussehen:

  • Erstellen/öffnen einer neuen Datei: vim foobar
  • Speichern und zu Git hinzufügen (add): :Gwrite
  • Änderungen committen: :Gcommit -m "testing"

Hier sieht man direkt eine kleine Abkürzung: Gwrite speichert nicht nur die aktuelle Datei im Arbeitsverzeichnis, sondern fügt sie auch gleich dem Index hinzu.

Mit Vim-Fugitive verliert der Git-Index ein wenig an Abstraktion – ein Beispiel: Angenommen, Sie haben die Datei „foobar“ geändert und im Arbeitsverzeichnis gespeichert. Möchten Sie diese Änderungen nun zurücknehmen und wieder mit dem Stand der Datei aus dem Index arbeiten, würden Sie normalerweise zum Beispiel „git checkout foobar“ verwenden, womit die geänderte „foobar“ im Arbeitsverzeichnis mit der Index-Version überschrieben würde.

Mit Vim-Fugitive können Sie die Index-Version aber direkt in den Editor laden: „:Gedit“ oder „:Gedit %“ (% enthält den Pfad zur Datei) ersetzt umgehend die geöffnete Arbeitsverzeichnis-Version durch die Index-Version. Nun können Sie wieder „:Gwrite“ ausführen. Aber Vorsicht: Dieses Mal verhält sich Gwrite nicht wie „git add“, sondern eben wie „git checkout“. Gwrite überschreibt quasi die jeweils andere Version und verhält sich somit entweder wie „git add“ oder wie „git checkout“.

Der große Vorteil daran: Man muss nicht erst über „git checkout“ gehen, sondern kann den Zustand direkt in der geöffneten Datei wiederherstellen, weitere Änderungen vornehmen und die Datei dann wieder wie gewohnt speichern, adden, committen.

Der Befehl „:Gread“ verhält sich genau andersherum: In der Arbeitsverzeichnis-Version ausgeführt liest sie die Index-Version ein und erledigt also ein „git checkout“. In der Index-Version ausgeführt liest sie die Arbeitsverzeichnis-Version ein und entspricht somit „git add“. Klingt verwirrend, ist nach ein, zwei Testdurchläufen aber ein echtes Highlight.

Dazu ein Beispiel:

  • Datei bearbeiten: vim foobar
  • Datei testen: :!%
  • Fehler: Datei auf Index-Version zurücksetzen: :Gread
  • Erfolg: Index aktualisieren: :Gwrite

Es ist ein wenig gewöhnungsbedürftig, ebenso wie die Navigation in Vim-Fugitive – aber es wäre auch nicht mehr das echte Vim-Feeling, wenn es nicht so wäre. Mit dem Add-on lässt sich noch viel mehr erledigen, für den Einstieg sind die beschriebenen Aspekte erstmal ausreichend: Die Interaktion über die G-Befehle und die direkte Zusammenarbeit mit dem Index.

Lieber ohne Plug-in?

Natürlich müssen Sie sich den „Overhead“ einer Erweiterung nicht unbedingt antun – nicht selten sind es doch die immer gleichen drei, vier Git-Kommandos, die den Arbeitsalltag ausmachen. Und die oben beschriebene Möglichkeit, mit der Shell zu interagieren, zusammen mit eigenen Tastenkürzeln, ermögliche eine schlanke Vim-Git-Variante.

Tastenkürzel werden einfach mit dem map-Befehl umgesetzt. Wichtig ist hier das oben bereits erwähnte „%“, das den Pfad der geöffneten Datei enthält. Ohne diesen Zusatz würde etwa ein „git diff“ gleich alle Differenzen aller gespeicherten, aber nicht zum Index hinzugefügten Dateien anzeigen – obwohl in diesem Fall nur ein „git diff foobar“ gewünscht ist. Für den Anfang könnten Sie etwa folgende Kürzel festlegen:

:map <F2> !: git status

:map <F3> !: git diff %

:map <F4> !: git add %

:map <F5> !: git commit -m "Automatische Commit-Nachricht" %

Damit lässt sich der Git-Workflow auch ohne zusätzliche Software sehr gut beschleunigen. Nichtsdestoweniger bietet Vim-Fugitive natürlich deutlich mehr Optionen sowie ausgefeiltere Abläufe. Und die direkte Interaktion mit dem Index ist nach kurzer Eingewöhnung ebenfalls sehr angenehm.

Wenn Ihnen Vim-Fugitive nicht wirklich gefällt und die Shell-Integration zu wenig bietet, können Sie aber auch auf andere Add-ons ausweichen. Ein paar nützliche Helfer:

Weitere Git-Erweiterungen für Vim finden Sie bei VimAwesome.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 46341528 / IDEs)