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

3

Eu tenho alguns projetos que precisam de comandos diferentes para executar, criar e testar, então coloquei um arquivo .vimrc em cada um dos diretórios do projeto que definem os mapeamentos para alguns botões F. Nos arquivos de ajuda do vim, diz:

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

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


Estou usando o gVim 7.3 x64 para Windows.

Hubro
fonte
Usar automaticamente um .vimrcarquivo do diretório atual é uma péssima idéia. Esse arquivo pode facilmente pertencer a um arquivo que você baixou e, automaticamente, fornecê-lo permitiria que quem criou esse arquivo executasse código arbitrário no seu computador.
Qqx
@qqx: Acho que posso ter isso em mente, da mesma maneira que lembro de não executar binários nos quais não confio: P
Hubro
set exrcnunca funcionou para mim. Você pode tentar este plugin . Provavelmente existem outros no vim.org.
romainl

Respostas:

5

Se 'exrc' é definido, o diretório atual é pesquisada por um arquivo chamado _vimrc, .vimrcou _exrc na inicialização . Isso não é feito toda vez que você entra :cdem um novo diretório. Vejo

:help .vimrc
garyjohn
fonte
Isso não torna inútil? : S Pelo menos para o gVim. Existe um parâmetro de inicialização do gVim.exe que eu possa usar para escolher o diretório de inicialização? Dessa forma, eu poderia criar um atalho para cada projeto. Ou melhor ainda, talvez eu possa especificar um arquivo de configuração do vim no atalho do aplicativo para evitar exrccompletamente a coisa. Google aqui estou eu
Hubro
Não ajuda com o gvim iniciado a partir do seu desktop ou gerenciador de arquivos, mas não se destina a ajudar com isso. O que você precisa é algo que carregue um vimrc a partir do diretório pai do primeiro arquivo que você abre ao iniciar o gvim. Nesse caso, você sabe que o nome do arquivo será passado como argumento, para poder testar isso e obter a fonte%: h / .vimrc. Veja as :helpentradas para argv()e fnamemodify(). Eu escrevi um plug-in para isso, que examina o caminho de cada arquivo quando ele é aberto e fornece um arquivo dependente de projeto de configurações locais de buffer.
precisa saber é
2

Aqui está algo que você pode tentar:

autocmd BufEnter{,other event} {full path to file} {do blah}

E você colocaria isso em um grupo de comando automático:

augroup {name you want here}
    autocmd!
    autocmd BufEnter{,other event} {full path to file} source {full path to vimrc file}
    autocmd BufEnter{,other event} {full path to file} {define mapping here}
    autocmd BufEnter{,other event} {full path to file} {do blah}
    autocmd BufEnter{,other event} {full path to file} {do blah}
augroup END

Então você colocaria suas configurações aqui, desta maneira, se você estiver em um buffer específico, esses mapeamentos serão carregados.

Também recomendo a realização de alguns eventos BufLeave para desabilitar esses mapeamentos quando você não estiver nesses buffers, se desejar.

isso funcionaria para as suas necessidades? Não tenho certeza exatamente do que você precisa, então simplesmente criei um modelo para você. :)

Como mostrei, você pode fazê-lo de várias maneiras e decidir o que é melhor para suas necessidades. Desculpe, na verdade, não estou resolvendo o problema subjacente dessa configuração. :(

greduan
fonte
Não tenho certeza se você está brincando ... Digo na minha pergunta que é exatamente isso que estou fazendo agora.
Hubro 11/01
@Codemonkey / facedesk 5 vezes. Eu perdi essa última parte. Espere um segundo, vou editar minha pergunta para usar comandos automáticos (se eu encontrar um evento para fazer isso). :)
greduan
@ Codemonkey OK, mudei minha resposta. Isso funcionaria melhor para você?
greduan
Eu realmente gostaria de saber por que o exrcnão está funcionando como anunciado. Entendi mal o que significa a opção?
Hubro 11/01
OK, algumas coisas para verificar. Você tem set exrcno seu arquivo .vimrc real? Além disso, em vez de um arquivo .vimrc, você sabia que também pode usar um arquivo .exrc para essas personalizações?
greduan
2

Na versão 8.1 ^ do vim, há um evento autocmd chamado DirChanged que você pode usar para avaliar o seu projeto específico .vimrc. Aqui está mais detalhes sobre quando este 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 meu .vimrcarquivo específico do projeto , uma vez que eu entrei cdna pasta do projeto. Após esta função no 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()
Vernon Grant
fonte
1

Apenas 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.

Hubro
fonte