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 :cd
entro 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
, .vimrc
ou_exrc
na inicialização. Isso não é feito toda vez que você :cd
acessa 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 .vimrc
arquivo específico do meu projeto, uma vez cd
na pasta do projeto. Cole esta função em seu ~/.vimrc
arquivo 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
.