Perché non vim sorgente il mio file .vimrc


9

Oggi ho scoperto che il mio .vimrcnon ha avuto effetto. Era ok poche ore fa.

Quando ho lanciato vim con $vim --plugin, :scriptnamesnon ho fatto eco a nulla: il .vimrcfile non era di provenienza. (Nota: è /etc/vimrcstato rimosso per eseguire il debug di questo problema.)

Poi ho provato a google e ho trovato $VIMINITvariabili sospette.

Ecco il valore di $VIMINIT:

$ echo $VIMINIT
set number

Documentazione Vim su 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 (*)!

Non sono riuscito a comprendere completamente la documentazione di VIM. Sembra che $VIMINITpossa rovinare l'avvio di vim.

Cancella $VIMINIT:

$ VIMINIT=
$ echo $VIMINIT

Il problema esiste ancora.


2
"Viene utilizzato il primo esistente, gli altri vengono ignorati." $VIMINITha precedenti su qualsiasi .vimrcfile. E soddisfa la regola del primo arrivato, primo servito. Quindi sì, .vimrcviene ignorato.
Sukima,

Risposte:


10

Espandendo la risposta di @ mMontu; Vim cerca l'inizializzazione in ordine di quella lista fino a quando non ne trova una. Poiché la $VIMINITvariabile ha la precedenza sul .vimrcfile, soddisfa la ricerca e qualsiasi altra opzione dopo che viene ignorata .

Il motivo per cui non ha funzionato dopo:

$ VIMINIT=
$ echo $VIMINIT

È (1) che stai impostando una variabile locale non una variabile d'ambiente. Questo deve essere esportato:

$ export VIMINIT=

(2) non funzionerà VIMINITancora perché è ancora definito:

$ printenv | grep VIMINIT
VIMINIT=

Ciò che deve accadere è la rimozione dall'ambiente tutti insieme:

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

(Questi comandi sono specifici di Bash. Modificali per adattarli alla tua shell preferita, se necessario.)


Ma questo funziona solo per una sessione, che ne dici di annullarlo definitivamente? o forse cercando dove è impostata la variabile, in modo da poter andare ed eliminarla?
Feng Yu,

8

Probabilmente hai frainteso la documentazione:

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

Pertanto, se si utilizza VIMINIT, vimrc non verrà caricato.

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

Stai impostando $ VIMINIT su un comando Ex set number, che è OK secondo i documenti. Ma se preferisci un vimrc, dovresti includere set numberin quel file invece di usare $ VIMINIT. Hai detto che l'hai impostato su vuoto e che il tuo vimrc non era ancora caricato, ma in realtà dovresti disinserire la variabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.