Puis-je récupérer le système d'exploitation actuel (Windows, Linux, OS X, ..) à l' aide de Vimscript pur (pas de Python ni de Perl)?
Je souhaite activer différents paramètres dans mon fichier .vimrc (synchronisé) pour différents types de systèmes d'exploitation que j'utilise.
Réponses:
Le meilleur moyen est d'utiliser
has()
, avec cette fonction, vous pouvez vérifier les fonctionnalités de Vim; Caractéristiques spécifiques du système d'exploitation à partir de:help feature-list
:Et certains systèmes plus anciens (semi-obsolètes):
Exemple:
Une autre manière plus flexible consiste à appeler l'externe
uname
, ce qui vous permet également d'obtenir le numéro de version, par exemple:Notez que ce
uname
n'est pas présent sur la plupart des systèmes Windows.Il est généralement préférable d'utiliser la détection de fonctionnalités plutôt que la détection de système d' exploitation . Par exemple, en utilisant l’une des fonctionnalités de
has()
ou en vérifiant si un chemin existe. 200_success ' donne un bon aperçu de cela, je ne vais donc pas répéter le même contenu ici.la source
:h feature-list
has()
sonne comme une bonne idée jusqu'à ce que vous l' essayer sur Mac OS X: dans la valeur par défaut/usr/bin/vim
,has('unix')
est vrai , mais les deuxhas('macunix')
ethas('mac')
sont faux alors que, dans le téléchargement de MacVim régulièrement, tous les trois sont vrai si vous utilisez l'interface graphique ou TUI.La meilleure solution est donc un mélange de
has('winXX')
Windows etuname
de systèmes de type Unix. Notez que la sortie deuname
se termine par une nouvelle ligne, elle doit donc être nettoyée avant utilisation.Voici le code que j'utilise depuis un moment, mis à jour pour
win64
:Après cela, vous pouvez utiliser la
g:os
variable n'importe où dans votrevimrc
:la source
has('unix')
c'est exact. C'est étrange que cehas('macunix')
soit faux, cependant. Cela ressemble presque à un bug?has('macunix')
semble dépendre deMACOS_X_UNIX
ce qui est défini siuname
c'estDarwin
dans leconfigure
script ...has ("win32")
semble fonctionner pour moi même dans Vim 64 bits.has('unix')
Cela est également vrai sous Windows Git Bash, ce qui n’est donc pas très utile pour distinguer le véritable Unix de l’émulé.Les variables d'environnement seraient utiles.
Pour détecter
tmux
, vous pouvez vérifierif !empty($TMUX)
ouif $TERM == 'screen'
.Vous pouvez également déduire le système d'exploitation de variables d'environnement telles que
$MACHTYPE
( définies par Bash ) ou$PATH
.Pour détecter si une fonctionnalité telle que TFS est installée, vous pouvez utiliser cette
executable()
fonction.la source
$MACHTYPE
. Vous devrez faire quelque chose comme enlet machtype=system('echo -n $MACHTYPE')
premier.Comme d'autres l'ont déjà indiqué, une détection fiable peut être délicate. Mieux vaut ne pas réinventer la roue, donc je voudrais mentionner la bibliothèque vim-divers , qui fournit
xolox#misc#os#is_mac()
etxolox#misc#os#is_win()
fonctions.la source
J'ai essayé
has('unix')
, mais je ne l'ai pas trouvé utile, car tous mes Linux, Mac et Windows Git Bash sont revenustrue
.Je trouve
uname
que cela convient car il fait la distinction entre Linux, Mac et Windows, sans trop de granularité.la source