Pourquoi Vim ne source-t-il pas mon fichier .vimrc

9

Aujourd'hui, j'ai trouvé que mon .vimrcne prenait pas effet. C'était ok il y a quelques heures à peine.

Lorsque j'ai lancé vim avec $vim --plugin, je n'ai :scriptnamesfait aucun écho: le .vimrcfichier n'était pas d'origine. (Remarque: a /etc/vimrcété supprimé pour déboguer ce problème.)

Ensuite, j'ai essayé de google et j'ai trouvé une $VIMINITvariable suspecte.

Voici la valeur de $VIMINIT:

$ echo $VIMINIT
set number

Documentation Vim sur 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 (*)!

Je ne pouvais pas comprendre complètement la documentation de vim. Il semble que cela $VIMINITpuisse gâcher le démarrage de vim.

Clair $VIMINIT:

$ VIMINIT=
$ echo $VIMINIT

Le problème existe toujours.

Feng Yu
la source
2
"Le premier qui existe est utilisé, les autres sont ignorés." $VIMINITa un précédent sur tout .vimrcfichier. Et il satisfait à la règle du premier arrivé, premier servi. Donc oui .vimrcest ignoré.
Sukima

Réponses:

10

Développer la réponse de @ mMontu; Vim recherche l'initialisation dans l'ordre de cette liste jusqu'à ce qu'il en trouve une. Étant donné que la $VIMINITvariable a priorité sur le .vimrcfichier, elle satisfait la recherche et toute autre option après cela est ignorée .

La raison pour laquelle cela n'a toujours pas fonctionné après:

$ VIMINIT=
$ echo $VIMINIT

Si (1) vous définissez une variable locale et non une variable d'environnement. Cela doit être exporté:

$ export VIMINIT=

(2) cela ne fonctionnera toujours pas car VIMINITest toujours défini:

$ printenv | grep VIMINIT
VIMINIT=

Ce qui doit arriver, c'est le retrait de l'environnement tous ensemble:

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

(Ces commandes sont spécifiques à Bash. Modifiez-les en fonction de votre shell préféré si nécessaire.)

Sukima
la source
Mais cela ne fonctionne que pour une session, que diriez-vous de le désactiver définitivement? ou peut-être en recherchant où est la variable définie, afin que vous puissiez aller la supprimer?
Feng Yu
8

Vous avez probablement mal compris la documentation:

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

Ainsi, si vous utilisez le VIMINIT, le vimrc ne sera pas chargé.

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

Vous définissez $ VIMINIT sur une commande Ex set number, ce qui est correct selon les documents. Mais si vous préférez un vimrc, vous devez l'inclure set numberdans ce fichier au lieu d'utiliser $ VIMINIT. Vous avez mentionné que vous définissez à vider et votre vimrc était toujours pas chargé, mais vous devez réellement désinitialiser la variable.

mMontu
la source