Czy mogę pobrać bieżący system operacyjny (Windows, Linux, OS X, ..) przy użyciu czystego Vimscript (bez Pythona lub Perla)?
Chcę włączyć różne ustawienia w moim (zsynchronizowanym) .vimrc dla różnych typów systemów operacyjnych, z których korzystam.
Odpowiedzi:
Najlepszym sposobem jest użycie
has()
, dzięki tej funkcji możesz sprawdzić funkcje Vima; Funkcje specyficzne dla systemu operacyjnego:help feature-list
:I niektóre starsze (częściowo przestarzałe) systemy:
Przykład:
Alternatywnym sposobem z większą elastycznością jest wywoływanie zewnętrznego
uname
, pozwala to również uzyskać numer wersji i takie:Pamiętaj, że
uname
nie jest obecny w większości systemów Windows.Zazwyczaj najlepiej jest korzystać z funkcji wykrywania , a nie systemu operacyjnego . Na przykład przez użycie jednej z funkcji
has()
lub sprawdzenie, czy istnieje ścieżka. Post 200_success daje dobry przegląd tego, więc nie powtórzę tutaj tej samej treści.źródło
:h feature-list
has()
brzmi jak dobry pomysł, dopóki nie spróbujesz na Mac OS X: w domyślnej/usr/bin/vim
,has('unix')
to prawda , ale zarównohas('macunix')
ihas('mac')
są fałszywe podczas gdy w regularnym MacVim pobrania, wszystkie trzy są prawdziwe , czy używasz GUI lub Tui.Najlepszym rozwiązaniem jest połączenie
has('winXX')
systemu Windows iuname
systemów uniksowych. Zauważ, że wyjścieuname
kończy się znakiem nowej linii, więc przed użyciem należy je wyczyścić.Oto kod, którego używam od dłuższego czasu, zaktualizowany dla
win64
:Następnie możesz użyć
g:os
zmiennej w dowolnym miejscu wvimrc
:źródło
has('unix')
jest dokładne. Dziwnehas('macunix')
to jednak fałsz. To prawie brzmi jak błąd?has('macunix')
wydaje się, że zależy od tegoMACOS_X_UNIX
, co jest ustawione, jeśliuname
jestDarwin
wconfigure
skrypcie ...has ("win32")
wydaje się , że działa dla mnie nawet w 64-bitowym Vimie.has('unix')
jest również prawdziwe w Windows Git Bash, więc nie jest bardzo przydatne do odróżniania prawdziwego unixa od emulowanego.Przydałyby się zmienne środowiskowe.
Aby wykryć
tmux
, możesz sprawdzićif !empty($TMUX)
lubif $TERM == 'screen'
.Możesz także wywnioskować system operacyjny ze zmiennych środowiskowych, takich jak
$MACHTYPE
( które jest ustawione przez Bash ) lub$PATH
.Aby wykryć, czy zainstalowana jest funkcja taka jak TFS, możesz użyć tej
executable()
funkcji.źródło
$MACHTYPE
.let machtype=system('echo -n $MACHTYPE')
Najpierw musisz zrobić coś takiego .Jak już inni wskazali, niezawodne wykrycie może być trudne. Lepiej nie wymyślaj koła na nowo, dlatego chciałbym wspomnieć o bibliotece vim-misc , która udostępnia
xolox#misc#os#is_mac()
ixolox#misc#os#is_win()
działa.źródło
Próbowałem
has('unix')
, ale nie uważałem tego za pomocne, ponieważ wszystkie moje Linux, Mac i Windows Git Bash wróciłytrue
po to.Stwierdziłem,
uname
że jest odpowiedni, ponieważ rozróżnia Linux, Mac, Windows, bez zbyt dużej szczegółowości.źródło