Wie man dateienspezifische Einstellungsänderungen in Vim mit Hilfe von Modeline vornimmt

Während Plugins zweifellos eine der größten Stärken von Vim sind, gibt es einige andere Funktionalitäten, die es zu einem der leistungsfähigsten und funktionsreichsten Texteditoren/IDEs machen, die Linux-Anwendern heute zur Verfügung stehen. Eine dieser Funktionalitäten ist die Möglichkeit, dateienspezifische Einstellungsänderungen vorzunehmen. Auf diese Fähigkeit kann über die Modeline Funktion des Editors zugegriffen werden.

In diesem Artikel werden wir anhand leicht verständlicher Beispiele besprechen, wie Sie die Modeline Funktion von Vim nutzen können.

But before we start doing that, it's worth mentioning that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 16.04, and the Vim version we've used is 7.4.

VIM Modeline

Verwendung

Wie wir bereits erwähnt haben, können Sie mit Vims Modeline Funktion dateienspezifische Änderungen vornehmen. Angenommen, Sie möchten alle Registerkarten, die in einer bestimmten Datei Ihres Projekts verwendet werden, durch Leerzeichen ersetzen und sicherstellen, dass alle anderen Dateien von dieser Änderung nicht betroffen sind. Dies ist ein idealer Anwendungsfall, bei dem Modeline Ihnen hilft, was Sie tun wollen.

Also, was Sie tun können, ist, dass Sie die folgende Zeile an den Anfang oder das Ende der betreffenden Datei setzen können:

# vim: set expandtab:

Es besteht eine hohe Wahrscheinlichkeit, dass, wenn Sie versuchen, die oben genannte Übung durchzuführen, um den Anwendungsfall auf Ihrem Linux-Rechner zu testen, die Dinge nicht wie erwartet funktionieren. Wenn das der Fall ist, machen Sie sich keine Sorgen, da die Modeline Funktion in einigen Fällen zuerst aktiviert werden muss (sie ist auf Systemen wie Debian, Ubuntu, Gentoo und OSX aus Sicherheitsgründen standardmäßig deaktiviert).

Um die Funktion zu aktivieren, öffnen Sie die .vimrc-Datei (die sich in Ihrem Heimatverzeichnis befindet) und fügen Sie dann die folgende Zeile hinzu:

set modeline

Wenn Sie nun eine Registerkarte eingeben und die Datei speichern (wo der Befehl expandtab modeline eingegeben wurde), wird die Registerkarte automatisch in Leerzeichen umgewandelt.

Lassen Sie uns einen anderen Anwendungsfall in Betracht ziehen. Angenommen, der Standard-Tabulatorbereich in Vim ist auf 4 gesetzt, aber für eine bestimmte Datei möchten Sie ihn auf 8 erhöhen, dazu müssen Sie die folgende Zeile am Anfang oder Ende der Datei hinzufügen:

// vim: noai:ts=8:

Versuchen Sie nun, eine Registerkarte einzugeben, und Sie werden sehen, dass die Anzahl der Felder, die sie abdeckt, 8 beträgt.

Du hast vielleicht bemerkt, dass ich gesagt habe, dass diese Modeline-Befehle irgendwo in der Nähe des oberen oder unteren Randes der Datei eingegeben werden müssen. Wenn Sie sich fragen, warum das so ist, liegt der Grund darin, dass das Feature so gestaltet ist. Die folgenden Zeilen (aus der offiziellen Vim-Dokumentation) sollen dies verdeutlichen:

„Die Modeline darf sich nirgendwo in der Datei befinden: Sie muss in der ersten oder letzten Zeile stehen. Die genaue Position, an der vim auf die Modellierung prüft, wird durch die modelinesVariable gesteuert; siehe :help modelines. Standardmäßig ist er auf 5 Zeilen eingestellt.“

Und hier ist, was der Befehl :help modelines (in den obigen Zeilen erwähnt) sagt:

If 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.

Versuchen Sie, den Modeline-Befehl über den Standardbereich von 5 Zeilen (entweder von unten oder von oben) hinaus zu setzen, und Sie werden feststellen, dass die Tab-Räume wieder auf den Vim-Standard zurückkehren – in meinem Fall sind das 4 Leerzeichen.

Sie können dieses Verhalten jedoch bei Bedarf mit dem folgenden Befehl in Ihrer .vimrc-Datei ändern.

set modelines=[new-value]

Zum Beispiel habe ich den Wert von 5 auf 10 erhöht.

set modelines=10

Das bedeutet, dass ich den modeline Befehl jetzt irgendwo zwischen die ersten oder letzten 10 Zeilen der Datei setzen kann.

Wenn Sie während der Bearbeitung einer Datei zu einem beliebigen Zeitpunkt fortfahren, können Sie folgendes eingeben (mit dem Vim-Editor im Befehlsmodus), um die aktuellen modellbezogenen Einstellungen sowie den Ort der letzten Einstellung zu sehen.

:verbose set modeline? modelines?

In meinem Fall hat der obige Befehl beispielsweise die folgende Ausgabe erzeugt:

 modeline
      Last set from ~/.vimrc
 modelines=10
      Last set from ~/.vimrc

Hier sind einige der wichtigsten Punkte, die Sie über Vims Modeline Funktion wissen müssen:

  • Diese Funktion ist standardmäßig für Vim aktiviert, das im nokompatiblen (nicht Vi-kompatiblen) Modus läuft, aber einige bemerkenswerte Distributionen von Vim deaktivieren diese Option aus Sicherheitsgründen im System vimrc.
  • Die Funktion ist standardmäßig deaktiviert, wenn Sie als root bearbeiten (wenn Sie die Datei mit ’sudo‘ geöffnet haben, gibt es kein Problem – die Funktion funktioniert).
  • Mit ‚set'endet die Modelllinie am ersten Doppelpunkt, ohne einem Backslash zu folgen. Und ohne ‚set'kann kein Text den Optionen folgen. Zum Beispiel,/* vim: noai:ts=4:sw=4 */ ist eine ungültige Modelinie.

Sicherheitsbedenken

Leider kann die Modeline Funktion von Vim verwendet werden, um die Sicherheit zu beeinträchtigen. Tatsächlich wurden in der Vergangenheit mehrere sicherheitsrelevante Probleme mit der Modeline gemeldet, darunter Shell-Befehleingabe, Ausführung beliebiger Befehle, unbefugter Zugriff und mehr. Einverstanden, die meisten davon sind alt und wären inzwischen behoben, aber es gibt eine Vorstellung davon, dass die Modeline-Funktion von Hackern missbraucht werden könnte.

Fazit

Modeline mag eine erweiterte Funktion des Vim-Editors sein, aber es ist nicht sehr schwer zu verstehen. Es besteht kein Zweifel, dass ein wenig Lernkurve involviert war, aber das ist nicht viel, worum man bitten muss, wenn man bedenkt, wie nützlich die Funktion ist. Natürlich gibt es Sicherheitsbedenken, was bedeutet, dass Sie Ihre Optionen abwägen sollten, bevor Sie die Funktion aktivieren und nutzen.

Haben Sie schon einmal die Modeline Funktion genutzt? Wie war deine Erfahrung? Teile mit uns (und der gesamten HowtoForge-Community) in den Kommentaren unten.

Das könnte Dich auch interessieren …