Posso recuperar o sistema operacional atual (Windows, Linux, OS X, ..) usando o Vimscript puro (sem Python ou Perl)?
Quero habilitar configurações diferentes no meu (sincronizado) .vimrc para diferentes tipos de sistemas operacionais que estou usando.
Respostas:
A melhor maneira é usar
has()
, com esta função, você pode verificar os recursos do Vim; Recursos específicos do SO de:help feature-list
:E alguns sistemas mais antigos (semi-obsoletos):
Exemplo:
Uma maneira alternativa, com mais flexibilidade, é ligar para o externo
uname
, isso também permite obter o número da versão e:Observe que
uname
não está presente na maioria dos sistemas Windows.Geralmente, é melhor usar a detecção de recursos , em vez da detecção do SO . Por exemplo, usando um dos recursos
has()
ou verificando se existe algum caminho. A publicação 200_success ' fornece uma boa visão geral disso, então não repetirei o mesmo conteúdo aqui.fonte
:h feature-list
has()
parece uma boa idéia até você experimentá-lo no Mac OS X: no padrão/usr/bin/vim
,has('unix')
é verdadeiro, mas amboshas('macunix')
ehas('mac')
são falsos , enquanto, no download regular do MacVim, todos os três são verdadeiros, independentemente de você usar a GUI ou a TUI.Portanto, a melhor solução é uma combinação de sistemas
has('winXX')
Windows euname
Unix. Observe que a saídauname
termina com uma nova linha, portanto ela deve ser limpa antes do uso.Aqui está o código que uso há algum tempo, atualizado para
win64
:Depois disso, você pode usar a
g:os
variável em qualquer lugar do seuvimrc
:fonte
has('unix')
é preciso. É estranho quehas('macunix')
seja falso, no entanto. Isso quase soa como um bug?has('macunix')
parece dependerMACOS_X_UNIX
, que é definido seuname
éDarwin
noconfigure
script ...has ("win32")
parece funcionar para mim, mesmo no Vim de 64 bits.has('unix')
também é verdade no Windows Git Bash, por isso não é muito útil para distinguir o unix real do emulado.Variáveis de ambiente seriam úteis.
Para detectar
tmux
, você pode verificarif !empty($TMUX)
ouif $TERM == 'screen'
.Você também pode deduzir o sistema operacional de variáveis de ambiente como
$MACHTYPE
( que é definido pelo Bash ) ou$PATH
.Para detectar se um recurso como o TFS está instalado, você pode usar a
executable()
funçãofonte
$MACHTYPE
. Você terá que fazer algo comolet machtype=system('echo -n $MACHTYPE')
primeiro.Como outros já indicaram, uma detecção confiável pode ser complicada. É melhor não reinventar a roda, então eu gostaria de mencionar a biblioteca vim-misc , que fornece
xolox#misc#os#is_mac()
exolox#misc#os#is_win()
funciona.fonte
Eu tentei
has('unix')
, mas não achei útil, pois todos os meus Linux, Mac e Windows Git Bash voltaramtrue
para ele.Eu achei
uname
adequado, pois distingue entre Linux, Mac, Windows, sem muita granularidade.fonte