Como posso fazer .vimrc ler de um arquivo externo?


22

Eu gostaria de modificar meu .vimrc ler o valor de uma variável de um arquivo externo. Como posso fazer isso?

Especificamente, um amigo e eu compartilhamos um repositório git com nosso .vim arquivos, mas existem algumas pequenas diferenças no que queremos em nossas configurações. Portanto, a maior parte do arquivo é comum, mas usamos instruções if para determinar se devemos carregar seções específicas do usuário, assim:

let whoami = "user2"
if whoami == "user1"
...

Depois de verificar o nosso comum .vimrc fora do controle de origem, cada um de nós tem que mudar o let whoami atribuição para que nossa própria seção seja carregada. Em vez disso, gostaria de manter um arquivo separado, que pode ser diferente para cada um de nós, e do qual o vim carregará o valor dessa variável.

Talvez outro ângulo sobre isso seja: O vim vai ler automaticamente todos os arquivos da minha .vim diretório? Em caso afirmativo, cada um poderia colocar um link simbólico chamado username.vim e vinculá-lo a um arquivo externo que seria diferente para cada um de nós.

Respostas:


32

no seu arquivo principal .vimrc:

source otherVimScriptFilePath.vim

Em seguida, basta colocar sua instrução variável nesse arquivo:

" otherVimScriptFilePath.vim
let whoami = "user1"

2
FYI - Na minha situação, foi útil fazer let whoami = "" logo antes do source linha, de modo que, se não conseguir carregar o arquivo externo, a variável existe e recebo a mensagem de erro que havíamos configurado anteriormente para a variável não sendo definida.
Nathan Long

2
@GorillaSandwich: Eu uso isso para fonte meu vimrc na minha máquina windows, pois o Windows não tem links simbólicos. Eu tenho uma pasta SVN que contém este e todos os meus outros arquivos de ponto. Então eu só tenho um _vimrc que origina o real na pasta svn.
Robert S Ciaccio

@GorillaSandwich: veja minha resposta para o silent! source parte
akira

5

Para responder a última pergunta, os arquivos em ~/.vim não são automaticamente carregados, mas todos os arquivos ~/.vim/plugin está.


2
e alguns outros lugares abaixo de ~ / .vim ( after, autoload )
akira

5

Usando um try / catch

Desde que fiz esta pergunta, eu criei outro caso de uso para carregar um arquivo externo: ajustes específicos da máquina.

Como posso ou não precisar fazer ajustes em uma determinada máquina, estou usando try/catch para carregar o arquivo externo; se não houver tal arquivo, eu deixo falhar silenciosamente.

" If there are any machine-specific tweaks for Vim, load them from the following file.
try 
  source ~/.vimrc_machine_specific
catch
  " No such file? No problem; just ignore it.
endtry 

4

Você pode fazer com que seu ~ / .vimrc carregue outro arquivo usando o :source comando. Por exemplo, cada um poderia colocar seus comandos exclusivos em ~ / .myvimrc e carregar esses comandos com

source ~/.myvimrc

Ou, como você estava pensando, cada um poderia colocar seu nome nesse arquivo assim:

let user = "user1"

e depois coloque isso no seu ~ / .vimrc:

source ~/.myvimrc
if user == "user1"
    " do this
elseif user == "user2"
    " do that
else
    echo "Invalid user"
endif

Em vez de colocar seus nomes em arquivos, você poderia usar $ USER como akira sugerido ou definido user usando whoami, como isso:

let user = substitute(system('whoami'), '\n', '', '')

A função substitute () é necessária porque a saída de system () geralmente tem um '\ n' no final.


whoami não funciona no windows
akira

@akira: É verdade, mas o GorillaSandwich está usando o Unix, não o Windows. $ USER não funciona com o Windows, pelo menos não o Windows XP.
garyjohn

Apenas dizendo, no windows seu $ USERNAME. ponto principal é: whoami gera um novo processo, quando você abre seu editor, ele deve ser rápido e não (inútil) fazer o trabalho várias vezes novamente.
akira

2

o nome do usuário que efetuou login está disponível na variável de ambiente $ USER. você pode acessar essa variável facilmente:

:echo $USER

então, basta usar

execute "silent! source vimrc." . $USER

no seu vimrc e colocar suas configurações específicas do usuário em

vimrc.joe

ou seja qual for o seu nome de login é


0

Eu não tenho certeza do seu vimrc, então isso pode não ser viável, mas se houver partes grandes que você e seu amigo compartilham, você pode querer separá-los em plugins separados. Você pode adicionar arquivos ao ~/.vim/plugin diretório para que eles sejam carregados na inicialização. (Eles são carregados em ordem alfabética - use :scriptnames checar.)

Dessa forma, cada um de vocês pode ter um vimrc que é completamente único, mas todas as suas configurações comuns estão em plugins. Se você dividi-los logicamente, isso torna mais fácil compartilhar com os outros também.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.