Wie kann ich Vim dazu bringen, alle Benutzerkonfigurationen zu ignorieren, als ob sie frisch installiert wären?

21

Um sicherzustellen, dass das Verhalten nicht durch meine persönliche Konfiguration beeinflusst wird, möchte ich Vim so starten, dass alle von mir installierten Konfigurationsdateien ignoriert werden, als wäre Vim gerade erst zum ersten Mal neu installiert worden und der Benutzer hätte es ausgeführt sofort.

Dies wird in den häufig gestellten Fragen ( FAQ) angesprochen, die darauf hindeuten, dass Vim mit dem folgenden Befehl gestartet werden soll:

vim -u NONE -U NONE -N -i NONE

Dies wird zwar weitestgehend erreicht, die runtimepathOption enthält jedoch weiterhin ~/.vimund insbesondere ~/.vim/after(wenn ich z. B. die Dateityperkennung anschließend einschalte und den Dateityp ändere, wird Code in ~/.vim/after/syntax/the_relevant_filetype.vimausgeführt).

Ich kann dieses spezielle Problem umgehen, indem ich beim Start die folgenden Befehle aufrufe *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... aber ich bin nicht sicher, ob:

  1. Dies ist eine robuste Lösung: Sind dies die einzigen Pfade, die bewirken können, dass die Benutzerkonfiguration wirksam wird? Gibt es noch etwas, woran ich nicht gedacht habe?
  2. Es gibt einen besseren Weg, um das gewünschte Ergebnis zu erzielen.

* Durch die Verwendung von --cmdoder -u vimrcShell-Argumenten oder einfach durch die manuelle Eingabe.

EDIT : Hier ist ein konkretes Beispiel für ein Problem, das ich zu beheben versuche. (Obwohl ich möchte, dass die Lösung andere mögliche Probleme behebt, auf die ich möglicherweise noch nicht gestoßen bin.):

  1. Erstellen Sie eine Datei ~ / .vim / after / ftplugin / c.vim mit folgendem Inhalt:

    noremap i :echom "This is not default behaviour"<CR>
    

    Jetzt haben wir eine vom Benutzer installierte Konfiguration, die wir ignorieren möchten. Lassen Sie uns die in den FAQ vorgeschlagene Lösung testen.

  2. Führen Sie Vim mit folgendem Befehl aus:

    vim -u NONE -U NONE -N -i NONE
    
  3. Geben Sie die Befehle ein:

    :filetype plugin on
    :set ft=c
    i
    

Gewünschtes Verhalten : Vim sollte in den Einfügemodus wechseln. Dies ist, was es tun würde, wenn keine Benutzerkonfiguration existiert.

Beobachtetes Verhalten : Vim gibt "Dies ist kein Standardverhalten" aus.

Reich
quelle
Was passiert auf einem Unix-ähnlichen System, wenn Sie Folgendes tun HOME=/dev/null vim -u NONE:?
muru
@muru Schöne Idee, und wahrscheinlich eine Antwort wert, aber es ist nicht perfekt . Sie verlieren offensichtlich die Fähigkeit, z. B. :cd ~aber auch den Standardspeicherort der viminfoDatei in $ HOME, was E138 verursachen kann. Ich denke, ein neues, leeres Verzeichnis zu erstellen und dieses für $ HOME zu verwenden, könnte die beste Lösung sein.
Rich
@muru Mir ist gerade eingefallen, dass Sie, wenn Sie $ HOME setzen, vermutlich auch nichts angeben müssen -u NONE?
Rich
1
In diesem Fall /tmpwäre es vielleicht besser, aber dann habe ich / dev / null als schwarzes Loch gewählt. ... oder so ähnlich HOME=$(mktemp -d) vim ....
Muru
Wird nicht system vimrc gelesen, wenn Sie es nicht verwenden -u NONE? Kommt darauf an, welches Verhalten du brauchst, nehme ich an.
Muru

Antworten:

16

Ab Vim 8.0.1554 (leider noch nicht Neovim) können Sie verwenden vim --clean. Diese Methode wird von empfohlen :help bugs.

:help --clean docs:

Ähnlich wie bei „-u DEFAULTS -U NONE -i NONE“:
- Initialisierungen von Dateien und Umgebungsvariablen ist übersprungenen
- ‚runtimepath‘ und ‚packpath‘ werden auf Home - Verzeichnis Einträge ausschließen (nicht geschieht mit -u Defaults).
- die | defaults.vim | Skript wird geladen, was "nicht kompatibel" impliziert: verwende Vim-
Standardwerte - no | gvimrc | Skript wird geladen
- es wird keine Viminfo-Datei gelesen oder geschrieben

jasonszhao
quelle
1
Nett! Dies ist viel einfacher, als mit der $HOMEVariablen herumzuspielen . Goodjob Vim Entwickler. Und danke für die Antwort!
Rich
1
--cleanFunktioniert neovimjetzt auch mit on master ( github.com/neovim/neovim/commit/… , wird in 0.4.0 aufgenommen), schließt jedoch das Ausgangsverzeichnis nicht aus.
Christian Clason
(Dieser Patch wartet jedoch darauf, portiert zu werden.)
Christian Clason,
11

Eine Möglichkeit, benutzerspezifische Dateien zu entfernen, besteht darin, einen anderen Wert von zu verwenden $HOME. Um zuzulassen, dass nichts gelesen oder in etwas geschrieben wird (z. B. viminfo), können Sie Folgendes verwenden /dev/null:

HOME=/dev/null vim -u NONE

Dies führt zu Fehlern viminfoin Bezug auf. Stattdessen können Sie einen temporären Ordner erstellen oder einen vorhandenen Ordner verwenden (z. B. /tmp):

HOME=$(mktemp -d) vim -u NONE

Mit einem solchen $HOME, -u NONEmöglicherweise nicht erforderlich, je nachdem, was Ihr Administrator auf das systemweite hinzugefügt hat vimrc. Zum Beispiel, bei den Laborsystemen ich verwalten, fügte ich eine /etc/vim/vimrc.local(bezogen von dem verpackten Vims Standard /etc/vim/vimrc) , die hat nocompatible, syntaxusw., Set, und filetype onaußerdem.

muru
quelle
3
vim -i KEINE, um das Laden von viminfo zu verhindern
Christian Brabandt
1

Ich kann nicht viel davon beantworten, aber einen Punkt, den ich nicht erwähnt sehe, und eine Interpretation dessen, was im Titel steht, beantworten

Wie kann ich Vim dazu bringen, alle Benutzerkonfigurationen zu ignorieren, als ob sie frisch installiert wären?

einige haben vorgeschlagen vim -u NONE odervim -u NORC

Das ist in gewisser Hinsicht ein bisschen mehr Barebones als nur keine vimrc-Datei. Wenn ich 'i' eingebe, heißt das nicht 'Einfügen'. Möglicherweise möchten Sie, dass weiterhin "Einfügen" angezeigt wird. Wenn Sie vim mit einer leeren vimrc-Datei gestartet haben, wird Einfügen angezeigt

Das liegt daran, dass vim zuerst eine Standardkonfiguration lädt.

Sie können vim auf diese Standarddatei verweisen, damit Ihre vimrc-Datei leer bleibt. Vergewissern Sie sich /etc/vim/vimrc, dass Sie vim -u /etc/vim/vimrcdie Standarddatei haben und dies unter OSX tun können/usr/share/vim/vicmrc

barlop
quelle
Ich denke, genau das wird vim --clean für Sie tun.
Quemeraisc
@quemeraisc vim --cleanwird geladen defaults.vim. Diese Antwort bezieht sich auf das System vimrc (siehe :help system-vimrc.), Von dem ich denke, dass es nicht geladen wird vim --clean.
Rich
@barlap: Um Verwirrung zu vermeiden mit defaults.vim (siehe :help defaults.vim), vielleicht besser der Benennung zu ändern , default configum system vimrcin dieser Antwort. Oder noch besser, diskutieren Sie beide in der Antwort!
Rich
0

Aus Vim-FAQ 2.5 :

2.5. Ich habe ein "xyz" -Problem mit Vim. Wie stelle ich fest, dass ein Problem mit meinem Setup oder mit Vim vorliegt? / Habe ich einen Fehler in Vim gefunden?

Zuerst müssen Sie herausfinden, ob der Fehler in den eigentlichen Laufzeitdateien oder in einem mit Vim gelieferten Plugin liegt oder ob es sich um einen einfachen Nebeneffekt einer Konfigurationsoption aus Ihrer .vimrc- oder .gvimrc-Datei handelt. Starten Sie also zunächst vim wie folgt:

vim -u NONE -U NONE -N -i NONE

Dadurch wird Vim im nicht kompatiblen Modus (-N) gestartet, ohne dass Ihre Viminfo-Datei gelesen wird (-i NONE), ohne dass eine Konfigurationsdatei gelesen wird (-u NONE, wenn keine .vimrc-Datei gelesen wird, und -U NONE, wenn keine .gvimrc-Datei gelesen wird) sogar Plugin.

mMontu
quelle
1
Obwohl in den FAQ, funktioniert dies aus den in der Frage genannten Gründen nicht.
Rich
@Rich Aus Ihrem Kommentar zu der Frage: ensure that none of the behaviour I'm seeing is caused by user config- Dann versuchen Sie anscheinend genau das zu tun , was in dieser FAQ erklärt wird. Ich habe Ihre Frage erneut gelesen und verstehe immer noch nicht, aus welchen Gründen Sie sie genannt haben.
Montag,
Ich versuche tatsächlich genau das zu tun, was in den FAQ erklärt wird. Aber die Lösung, die es gibt, funktioniert wegen der runtimepathEinstellung nicht.
Rich
Was genau ist falsch an der runtimepath? Dies scheint die Standardeinstellung für diese Option zu sein, wie in erläutert :help rtp. Wie wirkt sich dieser Wert auf Ihren Test aus?
MMontu
@Rich Ich meine, sehen Sie Unterschiede im Vergleich zu einer Neuinstallation, nachdem Sie die Dateityperkennung aktiviert haben?
MMontu