Dlaczego vim nie źródła mojego pliku .vimrc

9

Dzisiaj stwierdziłem, że mój .vimrcnie zadziałał. Kilka godzin temu było ok.

Kiedy uruchomiłem vima z $vim --plugin, :scriptnamesnic nie powtórzyło: .vimrcplik nie został pobrany. (Uwaga: /etc/vimrczostał usunięty w celu debugowania tego problemu).

Potem spróbowałem google i okazało się, że $VIMINITzmienna jest podejrzana.

Oto wartość $VIMINIT:

$ echo $VIMINIT
set number

Dokumentacja Vima na temat 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 (*)!

Nie mogłem w pełni zrozumieć dokumentacji vim. Wygląda na to, że $VIMINITmoże to zepsuć uruchomienie vima.

Wyczyść $VIMINIT:

$ VIMINIT=
$ echo $VIMINIT

Problem nadal istnieje.

Feng Yu
źródło
2
„Pierwszy z nich jest używany, pozostałe są ignorowane”. $VIMINITma precedens nad dowolnym .vimrcplikiem. I spełnia zasadę kto pierwszy, ten lepszy. Więc tak .vimrcjest ignorowane.
Sukima,

Odpowiedzi:

10

Rozwijanie odpowiedzi @ mMontu; Vim szuka inicjalizacji w kolejności na tej liście, dopóki jej nie znajdzie. Ponieważ $VIMINITzmienna ma pierwszeństwo przed .vimrcplikiem, spełnia kryteria wyszukiwania, a każda inna opcja jest ignorowana .

Powód, dla którego nadal nie działał po:

$ VIMINIT=
$ echo $VIMINIT

Czy (1) ustawiasz zmienną lokalną, a nie zmienną środowiskową. To musi zostać wyeksportowane:

$ export VIMINIT=

(2) to nadal nie działa, ponieważ VIMINITnadal jest zdefiniowane:

$ printenv | grep VIMINIT
VIMINIT=

To, co musi się zdarzyć, to całkowite usunięcie ze środowiska:

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

(Te polecenia są specyficzne dla Bash. W razie potrzeby zmień je, aby pasowały do ​​preferowanej powłoki).

Sukima
źródło
Ale to działa tylko w przypadku sesji, a co z jej definitywnym rozbrojeniem? a może szukając, gdzie jest ustawiona zmienna, aby móc ją usunąć?
Feng Yu,
8

Prawdopodobnie źle zrozumiałeś dokumentację:

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

Dlatego jeśli używasz VIMINIT, vimrc nie zostanie załadowany.

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

Ustawiasz $ VIMINIT na polecenie Ex set number, co jest zgodne z dokumentacją. Ale jeśli wolisz vimrc, powinieneś dołączyć set numberdo tego pliku zamiast używać $ VIMINIT. Wspomniałeś, że ustawiłeś go na pusty i twój vimrc wciąż nie został załadowany, ale tak naprawdę powinieneś rozbroić zmienną.

mMontu
źródło