@ 200_success Mam kilka skryptów i klawiszy dla MS TFS i msbuild, które są całkiem bezużyteczne w środowiskach innych niż Windows, a nie muszę tmux wsparcie w gVim na Windows. Ponadto w różnych systemach są zainstalowane różne czcionki, a ścieżki mogą się również różnić.
Najlepszym sposobem jest użycie has(), dzięki tej funkcji możesz sprawdzić funkcje Vima; Funkcje specyficzne dla systemu operacyjnego
:help feature-list:
macunix Macintosh version of Vim, using Unix files (OS-X).
unix Unix version of Vim.
win32 Win32 version of Vim (MS-Windows 95 and later, 32 or
64 bits)
win32unix Win32 version of Vim, using Unix files (Cygwin)
I niektóre starsze (częściowo przestarzałe) systemy:
amiga Amiga version of Vim.
os2 OS/2 version of Vim.
win16 Win16 version of Vim (MS-Windows 3.1).
win64 Win64 version of Vim (MS-Windows 64 bit).
win95 Win32 version for MS-Windows 95/98/ME.
Przykład:
if has('win32')
echo "Someone please open the Window(s)!"
endif
Alternatywnym sposobem z większą elastycznością jest wywoływanie zewnętrznego uname, pozwala to również uzyskać numer wersji i takie:
let uname = system('uname -a')
Pamiętaj, że unamenie 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.
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ówno has('macunix')i has('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 i unamesystemów uniksowych. Zauważ, że wyjście unamekoń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:
if !exists("g:os")
if has("win64") || has("win32") || has("win16")
let g:os = "Windows"
else
let g:os = substitute(system('uname'), '\n', '', '')
endif
endif
Następnie możesz użyć g:oszmiennej w dowolnym miejscu w vimrc:
if has("gui_running")
if g:os == "Darwin"
set guifont=Fira\ Mono:h12
elseif g:os == "Linux"
set guifont=Fira\ Mono\ 10
elseif g:os == "Windows"
set guifont=Fira_Mono:h12:cANSI
endif
endif
Cóż, OSX jest systemem UNIX, wierzę, że jest nawet „certyfikowany UNIX”. To has('unix')jest dokładne. Dziwne has('macunix')to jednak fałsz. To prawie brzmi jak błąd?
Zrobiłem trochę sprawdzania i has('macunix')wydaje się, że zależy od tego MACOS_X_UNIX, co jest ustawione, jeśli unamejest Darwinw configureskrypcie ...
@Rich Tak, i to jako takie udokumentowane. To naprawdę rozsądna rzecz, czy obchodzi Cię, czy Twoja aplikacja ma 32 czy 64 bity? Ja nie. Powodem jest tak zwana „win32”, ponieważ właśnie taką nazwę Microsoft wybiera dla swojego interfejsu Windows NT API. Nazewnictwo rzeczy nie jest mocną stroną Microsoftu .
„$ MACHTYPE (który jest ustawiany przez Bash)” . W rzeczywistości, jeśli zmienna jest ustawiona przez Bash, oznacza to, że nie jest to zmienna środowiskowa i nie będziesz w stanie uzyskać do niej dostępu w vimie po prostu $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()i xolox#misc#os#is_win()działa.
Próbowałem has('unix'), ale nie uważałem tego za pomocne, ponieważ wszystkie moje Linux, Mac i Windows Git Bash wróciły truepo to.
Stwierdziłem, unameże jest odpowiedni, ponieważ rozróżnia Linux, Mac, Windows, bez zbyt dużej szczegółowości.
let uname = substitute(system('uname'), '\n', '', '')
" Example values: Linux, Darwin, MINGW64_NT-10.0, MINGW32_NT-6.1
if uname == 'Linux' || uname == 'Darwin'
" do linux/mac command
else " windows
" do windows command
endif
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.