Detecção de SO em .vimrc
:
if has('win32')
......
elseif has('mac')
......
elseif has('unix')
......
endif
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?
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.
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.
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.
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
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.
Em relação à separação entre o Linux e o Windows - você pode simplesmente definir configurações diferentes em .vimrc
e _vimrc
, de acordo.