iX 12/2018
S. 136
Praxis
Textverarbeitung
Aufmacherbild

Dateien interaktiv vergleichen und zusammenführen mit Vim

Der kleine Unterschied

Meist schlummert der diff-mode im Schatten des Editors Vim. Zu Unrecht, bietet er doch überraschende Möglichkeiten, mit vorhandenen Bordmitteln Unterschieden zwischen Dateien nachzuspüren und sie interaktiv zu bearbeiten.

Differenzen zwischen zwei Dateien zu finden, zählt zu den häufigsten Aufgaben von Administratoren und Programmierern. Greift man zum Standardbefehl diff datei1 datei2, geht insbesondere bei großen Dateien oder vielen Unterschieden schnell die Übersicht verloren. Die naheliegende Kombination mit more oder less erleichtert das Erkennen der Abweichungen nur geringfügig. Grund ist die linear-sequenzielle Darstellung, die keine leicht erfassbare Hervorhebung der Unterschiede liefert.

Kleine Verbesserungen lassen sich mit diff -y, sdiff oder icdiff und der Darstellung side-by-side erreichen. sdiff bietet zusätzlich eine Funktion für einen rudimentären interaktiven Merge zweier Dateien an, zu bewerkstelligen mit sdiff -o merged datei1 datei2. Trotzdem bleiben Wünsche hinsichtlich der klaren und gut lesbaren Darstellung der Unterschiede zwischen den Dateien offen.

Deshalb existiert eine Reihe Werkzeuge, die sich auf die Anzeigen von Textabweichungen konzentrieren. Sowohl kostenfreie, quelloffene Werkzeuge wie kompare als auch kostenpflichtige Produkte wie beyond compare sind erhältlich. Sie zielen auf recht unterschiedliche Bedürfnisse ab, was ihre jeweiligen Vor- und Nachteile erklärt. Ihnen gemein ist jedoch, dass sie als separate Werkzeuge der Installation und Pflege bedürfen und ihre eigene Bedienungslogik mit sich bringen. Inkompatibilitäten lassen sich vor allem in heterogenen Umgebungen dann oft nur schwer vermeiden.

Für nahezu alle Plattformen verfügbar ist Vim, unter anderem für Windows, VMS, macOS, iOS und Android. Dabei achten die Entwickler dort, wo es möglich ist, auf die Rückwärtskompatibilität des Vi IMproved zum vi [1]. Linux-Systeme und viele Unix-Derivate stellen Vim standardmäßig und oft sogar über den Link vi bereit, was sich im Vim/vi mit dem Befehl :version überprüfen lässt.

Auch drei oder vier Dateien kann Vim miteinander vergleichen. Hier hat er die differierenden Zeilen rosa und die Unterschiede selbst rot eingefärbt (Abb. 1).

Trotz seines Alters und der großen Konkurrenz landete Vim in der Entwicklerumfrage 2018 der Internetplattform Stack Overflow auf Platz 4 insgesamt und auf Platz 1 bei den Administratoren (siehe ix.de/ix1812136). Vim beherrscht bereits seit 2001 den sogenannten diff-mode. Damit kann der Vim-Benutzer die Unterschiede von zwei, drei oder vier Dateien optisch aufbereiten (siehe Abbildung 1).

Auf die Unterschiede eingestellt

Voraussetzung ist lediglich, dass Vim mit der Option diff kompiliert wurde. Dann sollte in der Liste, die man mit dem Befehl :version generiert, die Option +diff vorkommen. Nur selten, bei extrem minimalistischen Varianten, fehlt sie. In diesem Fall hilft nur das Installieren einer anderen, mit diff-Option übersetzten Vim-Variante.

Vim stellt im diff-mode die Inhalte der einzelnen Dateien mit den markierten Unterschieden in vertikal nebeneinander angeordneten Fenstern dar. Identische Zeilen befinden sich in allen Fenstern auf gleicher Höhe. Differierende, fehlende oder hinzugefügte markiert Vim farbig und stellt sie zwischen den identischen Zeilen dar.

Dieses Mal benutzt Vim das Colorscheme: PaperColor für den Vergleich zweier Dateien. Einige identische Blöcke sind zusammengefaltet (Abb. 2).

Darüber hinaus weist Vim die abweichenden Zeichenketten innerhalb der Zeilen mit farbigen Markierungen aus (siehe Abbildung 1). Wem das voreingestellte Farbschema nicht gefällt, der kann ein alternatives wählen, das Vim mitbringt oder unter dem Stichwort „vim-colorschemes“ im Netz zu finden ist (siehe Abbildung 2). Da Vim den zeilenbasierten diff-Algorithmus verwendet, gelten auch dessen Limitierungen [2]. Bei der Arbeit mit dem diff-mode ist aber mit keinen nennenswerten Beeinträchtigungen zu rechnen.

Neben dem diff-mode erhielt Vim in der Version 6 die Funktion folding, über die die interaktive Hilfe mit dem Befehl :h folding mehr verrät. Sie faltet den Dateiinhalt in der Anzeige zusammen, indem sie Teile des Texts, etwa den Inhalt von Funktionen im Quelltext, einklappt.