Ist in einem .vimrc "set nocompatible" völlig nutzlos?

77

Mehrere Benutzer in dieser epischen Frage haben Folgendes in das Feld eingefügt.vimrc :

" Necesary for lots of cool vim things
set nocompatible

Aber ist es wirklich notwendig? Aus den Dokumenten:

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

Wenn set nocompatiblees sich um .vimrceine .vimrcDatei handelt , bedeutet dies, dass eine Datei vorhanden ist, was sie scheinbar sinnlos macht.

ClosureCowboy
quelle
Nein: Es behebt mehrere Fehler mit dem Einfügemodus und dem Löschschlüssel für mich auf meiner Rhel5-Box
Stephan

Antworten:

64

Wenn es sich um das systemweite vimrc handelt, ist diese Option nicht deaktiviert. Wenn Sie also das systemweite vimrc ändern und es möchten, müssen Sie es einstellen.

Aus dem Dokumentationsabschnitt * kompatibel-standard * (Hervorhebung von mir):

Wenn Vim gestartet wird, ist die Option "Kompatibel" aktiviert. Dies wird verwendet, wenn Vim seine Initialisierungen startet. Sobald jedoch eine Benutzer-vimrc- Datei oder eine vimrc-Datei im aktuellen Verzeichnis oder die Umgebungsvariable "VIMINIT" gefunden wird, wird sie auf "nicht kompatibel" gesetzt.

Ein weiterer Unterschied besteht darin, dass das explizite Festlegen von "nicht kompatiblen" Überschreibungen, die vim aufrufen, mit dem Flag -C festgelegt wird .

In jedem anderen Szenario ist das Einstellen von "nicht kompatibel" in Ihrem vimrc ein Noop.

Am Ende denke ich, dass es nur um "besser sicher als leid" geht.

R. Martinho Fernandes
quelle
1
Verdammt, konnte nicht direkt mit der -CFlagge verknüpfen . Zumindest in meinem Browser (Chrome 10, Windows 7) springt es zur -cFlagge. Also habe ich auf das, -Dwas gerade oben ist , verlinkt . :(
R. Martinho Fernandes
1
:set nocompatiblein .vimrc scheint einige Einstellungen zu ändern, zum Beispiel impliziert dies :set noshowcmd. Ich weiß aber nicht warum.
Martin von Wittich
22

Viele Leute teilen ihre .vimrc-Dateien auf GitHub und manchmal teste ich Einstellungen, ohne meine .vimrc-Datei zu ersetzen. Mit vim kann ich dies mit dem Flag -u tun.

vim -u test_vimrc

Von vim ": Hilfe nicht kompatibel"

(Hinweis: Dies gilt weder für die systemweite Datei vimrc oder gvimrc noch für eine Datei mit dem Argument | -u |.)

Dies bedeutet, dass vim nicht so konfiguriert wird, als ob die Datei den Namen .vimrc hätte und sich in Ihrem Home-Verzeichnis befindet, wenn Sie Ihre .vimrc-Datei für jemanden freigeben und dieser das Flag -u zum Laden Ihrer Datei verwendet.

Chad Skeeters
quelle
4
Dies ist ein sehr wichtiger Punkt. Ich habe das kürzlich auf die harte Tour gelernt. Wenn Sie -u verwenden, ist standardmäßig kompatibel aktiviert. Infolgedessen ist vim -u ~ / .vimrc nicht dasselbe wie vim Ihr ~ / .vimrc selbst laden zu lassen - es sei denn, Sie fügen das "set nocompatible" hinzu.
Dan
3
Vim-Konfigurationsdateien ohne vim -Nu test_vimrcnicht kompatible Komponenten können mit geladen werden, da -N den nicht kompatiblen Modus angibt.
Chad Skeeters
Ja. Vim hätte idealerweise ein Flag --testvimrc, das einfach den (nicht) kompatiblen Einstellungen von .vimrc selbst folgt. Es ist einfach verwirrend und nicht hilfreich, wenn das Flag zum Laden von Einstellungen eine der möglichen Einstellungen ändert. -u und -Nu erfüllen beide einen Zweck, testen jedoch die .vimrc nicht vollständig.
Dan
8

Ich habe vim in Cygwin auf einer Windows-VM verwendet und jedes Mal, wenn ich mich im Einfügemodus befand, führte das Drücken der Pfeiltasten dazu, dass vim "A", "B", "C" oder "D" auf dem Bildschirm druckte, anstatt zu scrollen. Ich habe ein Forum gefunden, das besagt, dass es behoben werden kann, wenn vim in den nicht kompatiblen Modus versetzt wird. Zum Glück tat es.

Ich habe "set nocompatible" in meine ~ / .vimrc-Datei eingefügt und das Problem bleibt bestehen. Vielleicht ist es also nicht 100% nutzlos.

Retsigam
quelle
6
Sie müssen nichts eingeben ~/.vimrc. Die bloße Existenz dieser Datei versetzt vim in einen nicht kompatiblen Modus. Probieren Sie es aus, sichern Sie Ihre aktuelle .vimrc mv ~/.vimrc ~/.vimrc.bakund erstellen Sie eine leere touch ~/.vimrc. Öffnen Sie jetzt vim und sehen Sie, was passiert.
Johnny Baloney
7
Oh Nebenwirkungen, wie sehr wir dich schätzen.
Dan Bechard
@JohnnyBaloney Nun, ich kann dir sagen, "was passiert" hier auf Ubuntu. Was Retsigam sagte, gilt auch für diese Distribution: Ohne set nocompatibleist vi ein Albtraum, mit den Cursortasten zu navigieren. Als ich Ihren Testfall ausprobierte, hatte ich sofort wieder denselben Albtraum mit dieser leeren .vimrc. Aber NOCH hast du überall recht gehabt. :-) Siehe zusätzliche Antwort zu meinen jüngsten Erkenntnissen.
Syntaxfehler
Diese Antwort ist ein Beispiel für "ein Forum gefunden, das sagte ... [um nicht kompatibel zu setzen]" Und es ist tatsächlich dieses Forum :)
Wyck
-1

Aufgrund dessen, worauf Johnny oben hingewiesen hat, war ich einfach erstaunt, als ich DIESES herausfand:

$ cat /usr/share/vim/vimrc.tiny
" Debian system-wide default configuration Vim
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after

set compatible

ARGH !!!

Nein, das habe ich NICHT erwartet. Debian (oder Debian Unstable alias Ubuntu) macht ihren Benutzern tatsächlich einen Albtraum, indem es die Standardeinstellung überschreibt, indem es kompatibel eingestellt wird . Ich hoffe, dass Sie jetzt wissen, warum Sie, wenn Sie von FreeBSD kommen, als Erstes die systemweite Einstellung überschreiben müssen, indem Sie eine set nocompatiblein Ihre eigene setzen ~/.vimrc. Denn sonst würden Sie nur Buchstaben produzieren, anstatt den Cursor so bewegen zu können, wie Sie es gewohnt sind.

Ich denke, das ist eine schreckliche Idee. Mit anderen Worten, diese set compatibleZeile sollte sowohl in Debian als auch in Ubuntu systemweit entfernt werdenvimrc.tiny , da sie neue Benutzer ärgert, die (noch) nicht so schlau sind, wie zu wissen, wie die Cursortasten funktionieren. Es sind Dinge wie diese, die sie nanound andere wegen solch völlig sinnloser Blocker zwingen !

Ich würde wirklich gerne mit dem Typen sprechen, der diese Änderung einmal in die systemweite Ressourcendatei in Debian übertragen hat. Und vielleicht auch an die Menschen, die seine Veränderung in vollen Zügen anerkannt haben.

Johnny hat recht: Auf Ihrem privaten PC können Sie diese Zeile aus der systemweiten .vimrc entfernen (falls vorhanden) und eine leere .vimrc auf Ihrem $ HOME berühren . Vielen Dank für den Hinweis, viel weniger Unordnung wieder. Beachten Sie, dass Sie das haben MÜSSEN ~/.vimrc(auch wenn es leer ist!), Da Sie sonst die Cursor nicht verwenden können, ohne sie explizit einzugeben set nocompatible.

Syntax-Fehler
quelle
1
Die Kommentare in vimrc.tinyerklären, dass es nur bezogen wird, wenn Sie vim as aufrufen vi. In diesem Fall ist es sinnvoll, vim zu verwenden, um zu versuchen, mit kompatibel zu sein vi. Diese Datei wird beim Ausführen nicht bezogen vim, und die zugehörige vimrcDatei im selben Verzeichnis enthält sie nicht. All dies wird in den Kommentaren der gefundenen vimrc.tinyDatei erklärt.
Mark Stosberg