Erläuterung der Vim-Editor-Modi

Bisher haben wir in unseren Tutorials rund um Vim über die Modeline-Funktion des Editors gesprochen sowie darüber, wie der Feature-Set von Vim mit Hilfe von Plugins erweitert werden kann. Wie wir alle wissen, bietet Vim jedoch eine Fülle von integrierten Funktionen; daher werden wir in diesem Tutorial die verfügbaren Modi, in denen der Editor gestartet werden kann, diskutieren.

Kompatible und nicht kompatible Modi in Vim

Um die oben genannten Vim-Modi richtig zu verstehen, müssen Sie zunächst einen wichtigen Aspekt des Initialisierungsprozesses des Editors verstehen.

System und lokale vimrc

Der fragliche Aspekt ist: Wenn Vim gestartet wird, wird vom Editor eine Datei auf Systemebene’vimrc‘ durchsucht, um systemweite Standardinitialisierungen durchzuführen.

Diese Datei befindet sich in der Regel im Verzeichnis$VIM/vimrc Pfad auf Ihrem System, aber wenn das nicht der Fall ist, dann können Sie den genauen Speicherort finden, indem Sie den Befehl :version in Vim ausführen. In meinem Fall zum Beispiel, hier ist der entsprechende Auszug aus der Ausgabe, die der Befehl erzeugt hat:

...
...
...
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
...
...
...

Die System ‚vimrc‘ Datei befindet sich also tatsächlich unter$VIM/vimrc, aber ich habe überprüft, dass die Umgebungsvariable $VIM nicht auf meinem Rechner gesetzt ist. In diesem Fall gibt es also – wie Sie in der obigen Ausgabe sehen können – einen Fallback-Wert für $VIM, der in meinem Fall wie folgt lautet /usr/share/vim. Als ich versuchte, nach’vimrc‘ in diesem Pfad zu suchen, stellte ich fest, dass die Datei vorhanden ist. Das ist also mein System vimrc, das – wie ich bereits erwähnt habe – beim Start von Vim gelesen wird.

Nachdem dieses System vimrc geparst wurde, sucht der Editor nach einer benutzerspezifischen (oder lokalen) ‚vimrc‘ Datei. Die Reihenfolge der Suche nach dem lokalen vimrc ist: Umgebungsvariable VIMINIT, $HOME/.vimrc, Umgebungsvariable EXINIT und eine Datei namens’exrc‘. Normalerweise ist es der $HOME/.vimrc oder ~/.vimrc, der existiert und als lokaler vimrc behandelt wird.

Über welche Kompatibilität sprechen wir?

Während wir über die kompatiblen und nicht kompatiblen Modi von Vim sprechen, ist es interessant zu wissen, welche Art von Kompatibilität diese Modi aktivieren und deaktivieren. Dazu sollte man sich zunächst bewusst sein, dass Vim eine Kurzform von Vi IMproved ist, und wie der vollständige Name schon sagt, ist der Editor eine verbesserte Version des Vi-Editors.

Mit verbessert ist gemeint, dass der Funktionsumfang von Vim größer ist als der von Vi. Um den Unterschied zwischen den beiden Editoren besser zu verstehen, besuchen Sie uns hier.

Während wir also über die kompatiblen und nicht kompatiblen Modi von Vim sprechen, ist die Kompatibilität, über die wir hier sprechen, die Kompatibilität von Vim mit Vi. Wenn Sie im kompatiblen Modus ausgeführt werden, werden die meisten Verbesserungen und Verbesserungen von Vim deaktiviert. Beachten Sie jedoch, dass Vim in diesem Modus nicht einfach Vi emuliert – der Modus setzt grundsätzlich einige Standardoptionen für die Funktionsweise des Vi-Editors.

Der nokompatible Modus – unnötig zu sagen – macht Vim funktionsfähig, ohne Vi-kompatibel zu sein, so dass alle seine Verbesserungen/Verbesserungen/Features dem Benutzer zur Verfügung stehen.

Wie kann man diese Modi aktivieren/deaktivieren?

Versuchen Sie, den Befehl :help compatible in Vim auszuführen, und Sie sollten die folgende Syntax sehen:

'compatible' 'cp' boolean (default on, off when a |vimrc| or |gvimrc|
 file is found)

Die Beschreibung besagt also, dass der kompatible Modus standardmäßig eingeschaltet ist, aber ausgeschaltet wird, wenn eine vimrc-Datei gefunden wird. Aber von welchem Vimrc sprechen wir? Die Antwort ist local vimrc. Tauchen Sie ein in die Details, die der Befehl :help compatible bietet, und Sie werden die folgende Zeile finden, die die Dinge klarer machen soll:

Effectively, this means that when a |vimrc| or |gvimrc| file exists, Vim will use the Vim defaults,otherwise it will use the Vi defaults. (Note: This doesn't happen for the system-wide vimrc or gvimrc file, nor for a file given with the |-u| argument).

Was also tatsächlich passiert, ist, dass beim Start von Vim zuerst die System-Vimrc-Datei analysiert wird – zu diesem Zeitpunkt ist der kompatible Modus standardmäßig eingeschaltet. Nun, wenn ein Benutzer (oder lokaler) vimrc gefunden wird, wird der nicht kompatible Modus eingeschaltet. Der Befehl :help compatible-default macht es deutlich:

When Vim starts, the 'compatible' option is on. This will be used when Vim starts its initializations. But as soon as a user vimrc file is found, or a vimrc file in the current directory, or the "VIMINIT" environment variable is set, it will be set to 'nocompatible'.

Wenn Sie das Standardverhalten überschreiben und den nicht kompatiblen Modus einschalten möchten, wenn der Editor mit dem Parsen der System-Vimrc-Datei beginnt, kann dies durch Hinzufügen des folgenden Befehls zu dieser Datei am Anfang geschehen:

:set nocompatible

Weitere nützliche Details

Hier sind einige weitere nützliche Details zu diesen Modi:

But there is a side effect of setting or resetting 'compatible' at the moment a .vimrc file is found: Mappings are interpreted the moment they are encountered. This makes a difference when using things like "<CR>". If the mappings depend on a certain value of 'compatible', set or reset it before
giving the mapping.
The above behavior can be overridden in these ways:
- If the "-N" command line argument is given, 'nocompatible' will be used, even when no vimrc file exists.
- If the "-C" command line argument is given, 'compatible' will be used, even when a vimrc file exists.
- If the "-u {vimrc}" argument is used, 'compatible' will be used.
- When the name of the executable ends in "ex", then this works like the "-C" argument was given: 'compatible' will be used, even when a vimrc file exists. This has been done to make Vim behave like "ex", when it is started as "ex".

Fazit

Einverstanden, die Chancen stehen gut, dass Sie sich nicht in einer Situation befinden, in der Sie den Vi-kompatiblen Modus von Vim einschalten müssen, aber das bedeutet nicht, dass Sie den Initialisierungsprozess des Editors ignorieren sollten. Schließlich weiß man nie, wann dieses Wissen von Nutzen sein könnte.

Das könnte Dich auch interessieren …