GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie man dateispezifische Einstellungsänderungen in Vim mit Modeline vornimmt

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

In diesem Artikel besprechen wir anhand von leicht verständlichen Beispielen, wie Sie die Modeline-Funktion von Vim verwenden 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

Nutzung

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

Sie können also die folgende Zeile an den Anfang oder das Ende der betreffenden Datei setzen:

# vim: set expandtab:

Es besteht eine hohe Wahrscheinlichkeit, dass die Dinge nicht wie erwartet funktionieren, wenn Sie versuchen, die oben genannte Übung zum Testen des Anwendungsfalls auf Ihrem Linux-Computer durchzuführen. Machen Sie sich in diesem Fall keine Sorgen, da die Modeline-Funktion in einigen Fällen zuerst aktiviert werden muss (auf Systemen wie Debian, Ubuntu, Gentoo und OSX aus Sicherheitsgründen ist sie standardmäßig deaktiviert).

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

set modeline

Wenn Sie jetzt einen Tab eingeben und die Datei speichern (wobei die Datei expandtab modeline-Befehl eingegeben wurde), wird der Tab automatisch in Leerzeichen umgewandelt.

Betrachten wir einen anderen Anwendungsfall. Angenommen, der Standard-Tabulatorabstand in Vim ist auf 4 eingestellt, 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 jetzt, einen Tabulator einzugeben, und Sie werden sehen, dass die Anzahl der Leerzeichen 8 beträgt. 

Sie haben vielleicht bemerkt, dass ich gesagt habe, dass diese Modeline-Befehle irgendwo am oberen oder unteren Rand der Datei eingegeben werden müssen. Wenn Sie sich fragen, warum das so ist, liegt der Grund darin, dass die Funktion so konzipiert ist. Die folgenden Zeilen (der offiziellen Vim-Dokumentation entnommen) sollten dies deutlicher machen:

"Die Modeline darf sich nicht irgendwo in der Datei befinden:sie muss in den ersten oder letzten paar Zeilen stehen. Die genaue Stelle, an der vim nach der Modeline sucht, wird durch die modelines gesteuert Variable; siehe :Hilfemodelllinien . Standardmäßig ist sie auf 5 Zeilen eingestellt ."

Und hier ist, was die :Hilfemodelllinien Befehl (auf den in den obigen Zeilen verwiesen wird) 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 Tabulatoren auf die Vim-Standardeinstellung zurückgesetzt werden - in meinem Fall sind das 4 Leerzeichen.

Sie können dieses Verhalten jedoch ändern, wenn Sie möchten, indem Sie den folgenden Befehl in Ihrer .vimrc-Datei verwenden.

set modelines=[new-value]

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

set modelines=10

Das bedeutet, dass ich jetzt den Modeline-Befehl irgendwo zwischen den ersten oder letzten 10 Zeilen der Datei platzieren kann.

Wenn Sie fortfahren, können Sie beim Bearbeiten einer Datei jederzeit Folgendes eingeben (mit dem Vim-Editor im Befehlsmodus), um die aktuellen Modeline-bezogenen Einstellungen sowie den Ort ihrer letzten Einstellung anzuzeigen.

:verbose set modeline? modelines?

In meinem Fall erzeugte der obige Befehl beispielsweise die folgende Ausgabe:

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

Hier sind einige wichtige Punkte, die Sie über die Modeline-Funktion von Vim wissen müssen:

  • Diese Funktion ist standardmäßig für Vim aktiviert, der im nocompatible (nicht Vi-kompatiblen) Modus läuft, aber einige bemerkenswerte Vim-Distributionen deaktivieren diese Option im System-vimrc aus Sicherheitsgründen.
  • 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 Modeline am ersten Doppelpunkt, der nicht auf einen umgekehrten Schrägstrich folgt. Und ohne 'set' , kein Text kann den Optionen folgen. Beispiel: /* vim:noai:ts=4:sw=4 */ ist eine ungültige Modeline.

Sicherheitsbedenken

Leider kann die Modeline-Funktion von Vim dazu verwendet werden, die Sicherheit zu gefährden. Tatsächlich wurden in der Vergangenheit mehrere sicherheitsbezogene Probleme mit Modeline gemeldet, darunter Shell Command Injection, willkürliche Befehlsausführung, unbefugter Zugriff und mehr. Zugegeben, die meisten davon sind alt und müssten inzwischen behoben sein, aber es lässt vermuten, dass die Modeline-Funktion von Hackern missbraucht werden könnte.

Schlussfolgerung

Modeline mag eine fortgeschrittene Funktion des Vim-Editors sein, aber es ist nicht sehr schwer zu verstehen. Es besteht kein Zweifel, dass eine gewisse Lernkurve erforderlich ist, aber das ist nicht viel zu verlangen, 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 verwenden.

Haben Sie jemals die Modeline-Funktion verwendet? Wie war Ihre Erfahrung? Teilen Sie uns (und der gesamten HowtoForge-Community) in den Kommentaren unten mit.


Linux
  1. Wie lässt man Ldapsearch mit Zertifikat auf Sles über TLS arbeiten?

  2. Machen Sie Vim zu Ihrer Perl-IDE mit dem Plugin perl-support.vim

  3. Machen Sie Vim als Ihre Bash-IDE mit dem bash-support Plugin

  4. Tutorial:Machen Sie Vim als Ihre C/C++ IDE mit dem c.vim Plugin

  5. So öffnen Sie eine Datei in vim mit Pipe

Wie man Textdateien mit dem Vim Editor unter Linux mit einem Passwort schützt

Wie man eine Datei mit Vim unter Linux mit einem Passwort schützt

So speichern Sie eine Datei in Vi / Vim und beenden den Editor

So kommentieren Sie mehrere Zeilen gleichzeitig im vim-Editor mit 3 Methoden

Wie man Änderungen in Vim rückgängig macht oder wiederholt

Wie man Dateien mit dem Vim-Editor in Ubuntu mit einem Passwort schützt