Warum wird vim meine .vimrc-Datei nicht als Quelle verwenden?

9

Heute habe ich festgestellt, dass meine .vimrcnicht wirksam wurde. Es war vor wenigen Stunden in Ordnung.

Als ich vim mit startete $vim --plugin, gab es :scriptnamesnichts wieder: Die .vimrcDatei wurde nicht bezogen. (Hinweis: /etc/vimrcwurde entfernt, um dieses Problem zu beheben.)

Dann habe ich versucht zu googeln und fand die $VIMINITVariable verdächtig.

Hier ist der Wert von $VIMINIT:

$ echo $VIMINIT
set number

Vim-Dokumentation über VIMINIT:

 c. Four places are searched for initializations.  The first that exists
    is used, the others are ignored.  The $MYVIMRC environment variable is
    set to the file that was first found, unless $MYVIMRC was already set.
    -  The environment variable VIMINIT (see also |compatible-default|) (*)
       The value of $VIMINIT is used as an Ex command line.
    -  The user vimrc file(s):
                "$HOME/.vimrc"      (for Unix and OS/2) (*)
                "s:.vimrc"          (for Amiga) (*)
                "home:.vimrc"       (for Amiga) (*)
                "$VIM/.vimrc"       (for OS/2 and Amiga) (*)
                "$HOME/_vimrc"      (for MS-DOS and Win32) (*)
                "$VIM/_vimrc"       (for MS-DOS and Win32) (*)
            Note: For Unix, OS/2 and Amiga, when ".vimrc" does not exist,
            "_vimrc" is also tried, in case an MS-DOS compatible file
            system is used.  For MS-DOS and Win32 ".vimrc" is checked
            after "_vimrc", in case long file names are used.
            Note: For MS-DOS and Win32, "$HOME" is checked first.  If no
            "_vimrc" or ".vimrc" is found there, "$VIM" is tried.
            See |$VIM| for when $VIM is not set.
    -  The environment variable EXINIT.
       The value of $EXINIT is used as an Ex command line.
    -  The user exrc file(s).  Same as for the user vimrc file, but with
       "vimrc" replaced by "exrc".  But only one of ".exrc" and "_exrc" is
       used, depending on the system.  And without the (*)!

Ich konnte die vim-Dokumentation nicht vollständig verstehen. Es scheint, dass dies $VIMINITden Start von vim durcheinander bringen kann.

Klar $VIMINIT:

$ VIMINIT=
$ echo $VIMINIT

Problem besteht immer noch.

Feng Yu
quelle
2
"Das erste, das existiert, wird verwendet, die anderen werden ignoriert." $VIMINIThat Vorrang vor jeder .vimrcDatei. Und es erfüllt die Regel "Wer zuerst kommt, mahlt zuerst". Also ja .vimrcwird ignoriert.
Sukima

Antworten:

10

Erweiterung der Antwort von @ mMontu; Vim sucht nach der Initialisierung in der Reihenfolge dieser Liste, bis eine gefunden wird. Da die $VIMINITVariable Vorrang vor der .vimrcDatei hat, erfüllt sie die Suche und jede andere Option danach wird ignoriert .

Der Grund, warum es danach immer noch nicht funktionierte:

$ VIMINIT=
$ echo $VIMINIT

Ist (1) Sie setzen eine lokale Variable keine Umgebungsvariable. Das muss exportiert werden:

$ export VIMINIT=

(2) Dies funktioniert immer noch nicht, da VIMINITimmer noch definiert ist:

$ printenv | grep VIMINIT
VIMINIT=

Was passieren muss, ist die gemeinsame Entfernung aus der Umwelt:

$ unset VIMINIT
$ printenv | grep VIMINIT || echo "Gone"
Gone

(Diese Befehle sind Bash-spezifisch. Ändern Sie sie bei Bedarf entsprechend Ihrer bevorzugten Shell.)

Sukima
quelle
Dies funktioniert jedoch nur für eine Sitzung. Wie wäre es, wenn Sie sie definitiv deaktivieren? oder vielleicht suchen, wo die Variable gesetzt ist, damit Sie sie löschen können?
Feng Yu
8

Sie haben die Dokumentation wahrscheinlich falsch verstanden:

 c. Four places are searched for initializations.  The first that exists
    is used, the others are ignored.

Wenn Sie also VIMINIT verwenden, wird der vimrc nicht geladen.

-  The environment variable VIMINIT (see also |compatible-default|) (*)
   The value of $VIMINIT is used as an Ex command line.

Sie setzen $ VIMINIT auf einen Ex-Befehl set number, der laut Dokumentation in Ordnung ist. Wenn Sie jedoch ein vimrc bevorzugen, sollten Sie es set numberin diese Datei aufnehmen, anstatt $ VIMINIT zu verwenden. Sie haben erwähnt , dass Sie es auf leeren und Ihre vimrc wurde noch nicht geladen, aber man sollte eigentlich unset die Variable.

mMontu
quelle