Como tornar as configurações do VIM dependentes do computador em .vimrc?

41

Eu compartilho meu arquivo de configuração do VIM entre vários computadores. No entanto, quero que algumas configurações sejam específicas para determinados computadores.

Por exemplo, os tamanhos das fontes no laptop de alta resolução devem ser diferentes da área de trabalho de baixa resolução. E mais importante, eu quero gVIM no Windows para se comportar mais windowsy e MacVim no OSX para se comportar mais maccy e gVIM no Linux para apenas se comportar como sempre faz. (Isso pode ser um sentimento estranho, mas eu estou muito acostumado a mudar de modo mental ao trocar sistemas operacionais)

Existe uma maneira de fazer algumas configurações na .vimrc dependente da máquina ou do SO?

    
por bastibe 01.10.2010 / 11:46

7 respostas

39

Detecção de SO em .vimrc :

if has('win32')
    ......
elseif has('mac')
    ......
elseif has('unix')
    ......
endif
    
por 01.10.2010 / 12:00
25

Para testar uma máquina específica, você pode testar a saída do comando hostname . Por exemplo,

let hostname = substitute(system('hostname'), '\n', '', '')
if hostname == "tigger"
   ...
elseif hostname == "pooh"
   ...
endif

Você também pode testar o valor das variáveis de ambiente disponíveis:

if $HOSTNAME == "tigger"
   ...
elseif $HOSTNAME == "pooh"
   ...
endif

A variável $DISPLAY também pode ser útil.

    
por 01.10.2010 / 17:35
8

Eu tenho este trecho no meu vimrc :

let s:host_vimrc = $HOME . '/.' . hostname() . '.vimrc'                                                                                                                               
if filereadable(s:host_vimrc)                                                                                                                                                        
  execute 'source ' . s:host_vimrc                                                                                                                                                   
endif

Isso simplesmente executa source $HOME/.$HOSTNAME.vimrc se existir. Eu usei hostname() e concatenação, você também pode usar o mais sucinto expand('$HOME/.$HOSTNAME.vimrc') se você souber que $HOSTNAME está sempre definido.

    
por 02.03.2013 / 17:54
7

A resposta anterior sobre a detecção do SO não detecta o OS X no MacVim para mim (e nem usa has("macunix") como a documentação sugere que deveria).

Veja o que eu uso para diferenciar entre o Windows e o OS X:

if has("win32")
  "Windows options here
else
  if has("unix")
    let s:uname = system("uname")
    if s:uname == "Darwin\n"
      "Mac options here
    endif
  endif
endif

Observe que has("win32") funcionou para mim, mesmo no Vim de 64 bits no Windows de 64 bits.

Você também pode usar testes semelhantes de uname dentro do bloco if has("unix") para distinguir outros tipos de Unix. Basta executar uname ou uname -a na linha de comando para ver o que você precisa comparar s:uname with . Veja também :h matchstr() se você precisa comparar apenas uma parte da saída do uname.

    
por 25.11.2010 / 11:52
2

Com muitas máquinas, listar todos os nomes de host em .vimrc pode se tornar tedioso, pode ser mais fácil distinguir entre diferentes tipos de unix:

" set font when running on Solaris
if (match(system('uname -s'), 'SunOS') >= 0)  
   set guifont=*   " fixes "E665: Cannot start GUI, no valid font found"
endif
    
por 04.01.2011 / 12:04
1

Você pode simplesmente colocar o material específico do SO em um .gvimrc personalizado para cada máquina e usar um .vimrc comum em todos eles. Ambos os arquivos são lidos quando o GVim é iniciado, apenas o .vimrc é lido quando o Vim não gui é iniciado.

    
por 01.10.2010 / 18:20
1

Em relação à separação entre o Linux e o Windows - você pode simplesmente definir configurações diferentes em .vimrc e _vimrc , de acordo.

    
por 12.04.2012 / 10:00