Como faço para que o Vim carregue automaticamente a configuração .vimrc do diretório atual?

Como faço para que o Vim carregue automaticamente a configuração .vimrc do diretório atual?

Tenho alguns projetos que precisam de comandos diferentes para execução, construção e teste, então coloquei um arquivo .vimrc em cada um dos diretórios do projeto que definem mapeamentos para alguns botões F. Nos arquivos de ajuda do vim diz:

'exrc' 'ex' booleano (desativado por padrão)
                        global
                        {não em Vi}
        Habilita a leitura de .vimrc, .exrc e .gvimrc no atual
        diretório.

Portanto, tenho essa opção habilitada, mas quando :cdentro em um diretório, o arquivo .vimrc não é carregado. Se eu escrever :so .\.vimrc, ele carrega bem. Por que não está sendo carregado automaticamente?


Estou usando o gVim 7.3 x64 para Windows.

Responder1

Se 'exrc' estiver definido, o diretório atual será pesquisado em busca de um arquivo chamado _vimrc, .vimrcou_exrc na inicialização. Isso não é feito toda vez que você :cdacessa um novo diretório. Ver

:help .vimrc

Responder2

Na minha opinião, esta é a melhor variante:

if getcwd() =~ '^\(/my/safe/dir1/\|/my/safe/dir2/\)'
  set secure exrc
endif

Retirado de:http://vim.wikia.com/wiki/Open_vimrc_file mas sintaxe fixa

Responder3

No vim versão 8.1^ existe um evento autocmd chamadoDirChangedque você pode usar para avaliar seu projeto específico .vimrc. Aqui estão mais detalhes sobre quando esse evento é acionado:

DirChanged = Working directory has changed in response to the |:cd| or |:lcd| commands.

Exemplo de trabalho

Não sou especialista em vim-script, mas criei a seguinte função que carrega o .vimrcarquivo específico do meu projeto, uma vez cdna pasta do projeto. Cole esta função em seu ~/.vimrcarquivo principal.

if !exists("*LoadProjectVimrc")
  function! LoadProjectVimrc()
    let vimrcFile = findfile(".vimrc", ".;")

    if !empty(vimrcFile)
      execute ":so" l:vimrcFile
      echom l:vimrcFile
    endif

  endfunction
endif
autocmd DirChanged * :call LoadProjectVimrc()

Responder4

Só para constar, o que acabei fazendo foi criar um atalho para cada um dos meus projetos e carregar um arquivo de configuração específico do projeto como um arquivo de sessão usando -S session.vim.

informação relacionada