Como posso fazer o .vimrc ler a partir de um arquivo externo?

21

Gostaria de modificar meu .vimrc para 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 nossos arquivos .vim , mas há 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 controle comum .vimrc fora da fonte, cada um de nós precisa alterar a atribuição let whoami 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á esse valor de variável.

Talvez outro ângulo sobre isso seja: O vim irá ler automaticamente todos os arquivos no meu diretório .vim ? Se sim, cada um poderia colocar um link simbólico chamado username.vim, e linkar para um arquivo externo que seria diferente para cada um de nós.

    
por Nathan Long 21.12.2010 / 19:57

6 respostas

30

no seu arquivo principal .vimrc:

source otherVimScriptFilePath.vim

depois é só colocar sua declaração de variável nesse arquivo:

" otherVimScriptFilePath.vim
let whoami = "user1"
    
por 21.12.2010 / 20:16
5

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

    
por 21.12.2010 / 21:07
5

Usando um try / catch

Desde que fiz esta pergunta, 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 um 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 
    
por 20.12.2011 / 14:20
4

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

source ~/.myvimrc

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

let user = "user1"

e 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ê pode usar $ USER como akira sugerido ou definir user usando whoami , assim:

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

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

    
por 22.12.2010 / 08:52
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, é só usar

execute "silent! source vimrc." . $USER

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

vimrc.joe

ou qualquer que seja seu nome de login

    
por 21.12.2010 / 20:25
0

Não sei qual é a aparência do seu vimrc, portanto, isso pode não ser viável, mas se houver grandes partes compartilhadas por você e seu amigo, convém separá-lo em plug-ins separados. Você pode adicionar arquivos ao diretório ~/.vim/plugin para que eles sejam carregados na inicialização. (Eles estão carregados em ordem alfabética - use :scriptnames para verificar.)

Dessa forma, você pode ter um vimrc completamente único, mas todas as suas configurações comuns estão em plug-ins. Se você dividi-los logicamente, isso facilita compartilhar com os outros também.

    
por 16.04.2011 / 19:42

Tags