FileBeagle ist ein minimaler Dateibrowser für VIM, mit dem man durch Verzeichnisse browsen, Dateien in VIM öffnen und neue Dateien erstellen kann und der sonst keine Funktionalität bereitstellt. Folglich ist er einfach zu lernen, schnell zu bedienen und man kann damit nicht versehentlich Dateien löschen oder sein Dateisystem durcheinanderbringen. Wer mehr Dateiverwaltungsfunktionalität im Editor braucht, kann zum Beispiel das in VIM eingebaute Plugin Netrw verwenden.
Netrw
Zu VIM muss man wohl nichts weiter sagen. Manche mögen diesen Editor, manche mögen ihn nicht. Als Plugins gibt es ziemlich aufwändige und funktionsreiche Dateimanager für VIM, z.B. NERDTree und das bereits mit VIM mitgelieferte Netrw. Da ich die Zahl meiner Plugins begrenzen wollte, entschloss ich mich für Netrw. Ich fand Netrw allerdings ein bisschen überdimensioniert für meine Zwecke und unhandlich in der Bedienung. Immerhin zeigt es defaultmäßig ein praktisches Banner mit wichtigen Tastenkürzeln an.
Netrw startet mit :Explore auf der VIM-Kommandozeile und kann natürlich auch vielfältig konfiguriert werden. Viele Optionen sind bereits eingebaut. So kann man bereits beim Start festlegen, ob Netrw im horizontal oder vertikal gesplitteten Fenster gestartet wird, indem man es mit :Sexplore, bzw. :Vexplore aufruft. Diese Befehlskürzel mögen jetzt vielleicht ein bisschen bizarr wirken, aber sie machen Sinn, denn die Buchstaben „s“ für horizontales Fenster-Splitting und „v“ für vertikales sind in VIM übliche Kürzel. Was Netrw aber nicht kann, ist nicht-leere Verzeichnisse löschen. Das überrascht angesichts der sonstigen Funktionsfülle ein wenig.
Netrw stammt von einem echten VIM-Veteranen, Dr. Chip, dessen Webseite an die 1990er Jahre erinnert (mir gefällt das) und etliche interessante Dinge vor allem zu VIM und für die Programmiersprache C enthält.
Kurz, Netrw ist ein nützliches und mächtiges Plugin, das defaultmäßig in VIM, Version 9 zur Verfügung steht. Gut zu wissen, wenn man es mal braucht.
Ich will aber in aller Regel eigentlich nur eine komfortable Möglichkeit innerhalb von VIM haben, die es mir erlaubt, durch Verzeichnisse zu blättern und dann gegebenenfalls eine der darin befindlichen Textdateien mit VIM zu öffnen. Verzeichnisse erstellen, Dateien kopieren, verschieben und löschen tue ich mit einem externen Dateimanager oder eben auf der Befehlszeile. Als ich feststellte, dass in Netrw ein Klick mit der rechten Maustaste auf eine markierte Datei diese löschen will, war mir das zu viel und ich beschloss, etwas anderes zu suchen: ein möglichst simples Plugin, das keine Dateioperationen wie Löschen etc. mitbringt.
FileBeagle
Was ich gefunden habe und seither verwende, ist FileBeagle. Es wird gestartet durch einfache Eingabe des Minusstrichs im Commandmode - und kann genau das:
- Verzeichnisse browsen,
- Dateien in VIM öffnen und
- neue Dateien erstellen.
Letzteres geschieht mit der simplen Eingabe von + oder %. Ich halte diese kleine Extrafunktionalität für sehr praktisch, denn neue Dateien anzulegen und dann zu wissen, in welchem Verzeichnis sie gespeichert sind, finde ich mit VIM alleine immer etwas unübersichtlich. Es gibt übrigens einen kleinen Unterschied zwischen den beiden Kommandos: + legt die neue Datei nur an, verbleibt aber im Dateibrowser, % öffnet sie gleich im Editor.
Ansonsten navigiert man durch die Dateien und Ordner mit den VIM-üblichen Tasten “h”, “j”, “k” und “l”; h bringt einen ein Verzeichnis höher, j bewegt den Cursor abwärts, k aufwärts und l öffnet entweder die aktuelle Datei im Editor oder, wenn die aktuelle Markierung ein Verzeichnis ist, wird dieses Verzeichnis im Browser geöffnet. Alternativ zu „l“ lässt sich auch die Eingabe-Taste verwenden. Die Backspace-Taste geht zum vorigen Verzeichnis zurück. Die Dateien lassen sich auch mit Control-T in einem neuen Tab, mit Control-S in einem horizontalen und mit Control-V in einem vertikalen Teilfenster von VIM öffnen. Und mit q wird man das FileBeagle-Fenster wieder los. Das ist im Wesentlichen alles, aber genau das, was ich brauche.
Es ist absichtlich so „wenig“: FileBeagle folgt dem VINE-(VIM Is Not Emacs)-Prinzip. Diese rekursive Abkürzung ist zunächst eine kleine Polemik gegen den legendären Konkurrenz-Editor von VIM, Emacs. Aber sie verweist auch auf eine grundsätzliche technische Designentscheidung, ob man mit einem Softwarewerkzeug möglichst alles machen können oder für jede Aufgabe möglichst ein spezialisiertes Werkzeug haben will. Emacs steht (tendenziell) eher für ersteres, VIM (tendenziell) eher für letzteres. Das Problem stellt sich nicht nur bei den beiden Editoren, sondern liegt wohl auch einem Teil des Streits um systemd als universellerem Ersatz für das Init-V-System in Linux zugrunde. Es gab zu systemd und seinen Alternativen vor einiger Zeit übrigens einen Artikel in GNU/Linux.ch. Beide Designprinzipien haben natürlich Vor- und Nachteile, weshalb sie wohl für den jeweils konkreten Fall immer neu betrachtet und in verschiedenen Mischformen realisiert werden müssen.
Zum Abschluss noch eine Bemerkung zur Installation von FileBeagle: Seit VIM, Version 8 braucht man die verschiedenen externen Plugin-Manager für VIM (die selbst auch Plugins sind) eigentlich nicht mehr verwenden, weil VIM einen eigenen, sehr simplen und wie ich finde praktischen Mechanismus für die Installation von Plugins mitbringt, kurz beschrieben z.B. hier.
Ganz kurz gesagt reicht es, seine Plugins als Unterverzeichnisse unter ~/.vim/pack/*/start/ zu stellen. VIM lädt sie dann beim Starten automatisch. Der Stern oben im Pfad zwischen pack/ und /start deutet an, dass dazwischen noch weitere Verzeichnisse eingeschoben sein können, z.B. ~/.vim/pack/mystuff/start/.
Das Plugin FileBeagle besteht aus zwei oder so Unterordnern, die dann zum Beispiel im Verzeichnispfad ~/.vim/pack/mystuff/start/filebeagle sitzen. Auch die lokale Initialisierungsdatei für VIM, vimrc ist im Verzeichnis ~/.vim. Man kann also das ganze Verzeichnis mit allen seinen Plugins samt der Konfiguration leicht sichern. Außerdem ist diese Konstellation gut für die Zusammenarbeit mit dem Versionsverwaltungssystem git geeignet. Ich selbst habe FileBeagle überhaupt nicht weiter konfiguriert, sondern habe es einfach in einen solchen Pfad wie oben kopiert – und es funktioniert. Manchmal ist es einfacher, ein paar vorgegebene Tastenkürzel zu lernen als seine eigenen zu erfinden und sich die dann zu merken :-)