Por que o vim não fonte meu arquivo .vimrc

9

Hoje, descobri que o meu .vimrcnão entrou em vigor. Estava tudo bem há algumas horas atrás.

Quando iniciei o vim $vim --plugin, :scriptnamesnão ecoou nada: o .vimrcarquivo não foi originado. (Nota: /etc/vimrcfoi removido para depurar esse problema.)

Então tentei pesquisar no Google e achei a $VIMINITvariável suspeita.

Aqui está o valor de $VIMINIT:

$ echo $VIMINIT
set number

Documentação do Vim sobre 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 (*)!

Eu não conseguia entender completamente a documentação do vim. Parece que isso $VIMINITpode atrapalhar a inicialização do vim.

Limpar $VIMINIT:

$ VIMINIT=
$ echo $VIMINIT

Problema ainda existe.

Feng Yu
fonte
2
"O primeiro que existe é usado, os outros são ignorados." $VIMINITtem precedente sobre qualquer .vimrcarquivo. E satisfaz a regra de quem chega primeiro a ser servido. Então, sim .vimrcé ignorado.
Sukima

Respostas:

10

Expandindo a resposta do @ mMontu; O Vim busca a inicialização na ordem dessa lista até encontrar uma. Como a $VIMINITvariável é precedente para o .vimrcarquivo, ela satisfaz a pesquisa e qualquer outra opção depois disso é ignorada .

O motivo pelo qual ainda não funcionou depois:

$ VIMINIT=
$ echo $VIMINIT

É (1) que você está configurando uma variável local e não uma variável de ambiente. Isso precisa ser exportado:

$ export VIMINIT=

(2) isso ainda não funcionará porque VIMINITainda está definido:

$ printenv | grep VIMINIT
VIMINIT=

O que precisa acontecer é a remoção do ambiente todos juntos:

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

(Esses comandos são específicos do Bash. Altere-os para se adequarem ao seu shell preferido, se necessário.)

Sukima
fonte
Mas isso só funciona para uma sessão, que tal desabilitá-la definitivamente? ou talvez pesquisando onde está a variável definida, para que você possa excluí-la?
Feng Yu
8

Você provavelmente não entendeu a documentação:

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

Portanto, se você estiver usando o VIMINIT, o vimrc não será carregado.

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

Você está configurando $ VIMINIT como um comando Ex set number, o que é bom de acordo com os documentos. Mas se preferir um vimrc, você deve incluir set numbernesse arquivo em vez de usar $ VIMINIT. Você mencionou que o definiu como vazio e seu vimrc ainda não estava carregado, mas na verdade você deve desmarcar a variável.

mMontu
fonte