Kann ich das aktuelle Betriebssystem (Windows, Linux, OS X, ..) mit reinem Vimscript (ohne Python oder Perl) abrufen ?
Ich möchte verschiedene Einstellungen in meinem (synchronisierten) .vimrc für verschiedene Arten von Betriebssystemen aktivieren , die ich verwende.
Antworten:
Die beste Möglichkeit ist
has()
, mit dieser Funktion nach Funktionen von Vim zu suchen. Betriebssystemspezifische Funktionen von:help feature-list
:Und einige ältere (teilweise veraltete) Systeme:
Beispiel:
Eine andere Möglichkeit mit größerer Flexibilität besteht darin, das Externe anzurufen
uname
. Auf diese Weise können Sie auch die Versionsnummer und Folgendes abrufen :Beachten Sie, dass
uname
dies auf den meisten Windows-Systemen nicht vorhanden ist.Im Allgemeinen empfiehlt es sich, die Feature-Erkennung anstelle der Betriebssystemerkennung zu verwenden . Zum Beispiel, indem Sie eine der Funktionen in verwenden
has()
oder prüfen, ob ein Pfad vorhanden ist. 200_success 'Beitrag gibt einen guten Überblick darüber, daher werde ich hier nicht den gleichen Inhalt wiederholen.quelle
:h feature-list
has()
klingt wie eine gute Idee , bis es auf Mac OS X versuchen: in dem Standard/usr/bin/vim
,has('unix')
ist wahr , aber beidehas('macunix')
undhas('mac')
sind falsch während in der regulären MacVim herunterladen, alle drei sind wahr , ob Sie die GUI oder die TUI verwenden.Die beste Lösung ist also eine Mischung aus
has('winXX')
für Windows unduname
auf Unix-ähnlichen Systemen. Beachten Sie, dass die Ausgabe vonuname
mit einem Zeilenumbruch endet, sodass sie vor der Verwendung gereinigt werden muss.Hier ist der Code, den ich seit einiger Zeit verwende, aktualisiert für
win64
:Danach können Sie die
g:os
Variable an einer beliebigen Stelle in Ihremvimrc
:quelle
has('unix')
also genau. Es ist jedoch seltsam, dass dieshas('macunix')
falsch ist. Das klingt fast wie ein Bug?has('macunix')
scheint zu hängen vonMACOS_X_UNIX
, welcher Satz ist , wennuname
istDarwin
imconfigure
Skript ...has ("win32")
scheint das bei mir sogar in 64-Bit-Vim zu funktionieren.has('unix')
trifft auch auf Windows Git Bash zu, so dass es nicht sehr nützlich ist, um echtes Unix von emuliertem zu unterscheiden.Umgebungsvariablen wären nützlich.
Zum Erkennen
tmux
können Sieif !empty($TMUX)
oder überprüfenif $TERM == 'screen'
.Sie können das Betriebssystem auch aus Umgebungsvariablen ableiten, z. B.
$MACHTYPE
( die von Bash festgelegt werden ) oder$PATH
.Mit dieser
executable()
Funktion können Sie feststellen, ob eine Funktion wie TFS installiert ist .quelle
$MACHTYPE
. Sie müssen so etwaslet machtype=system('echo -n $MACHTYPE')
zuerst tun .Wie andere bereits angedeutet haben, kann eine zuverlässige Erkennung schwierig sein. Besser nicht das Rad neu erfinden, deshalb möchte ich die vim-misc-Bibliothek erwähnen , die bietet
xolox#misc#os#is_mac()
undxolox#misc#os#is_win()
funktioniert.quelle
Ich habe es versucht
has('unix')
, aber ich fand es nicht hilfreich, da alle meine Linux-, Mac- und Windows-Git-Bash-Versionen darauf zurückgingentrue
.Ich fand
uname
es passend, da es zwischen Linux, Mac und Windows ohne allzu große Granularität unterscheidet.quelle