Geçerli işletim sistemini (Windows, Linux, OS X, ..) saf Vimscript (Python veya Perl olmadan ) kullanarak alabilir miyim?
Kullandığım farklı işletim sistemleri için (senkronize) .vimrc'deki farklı ayarları etkinleştirmek istiyorum .
Geçerli işletim sistemini (Windows, Linux, OS X, ..) saf Vimscript (Python veya Perl olmadan ) kullanarak alabilir miyim?
Kullandığım farklı işletim sistemleri için (senkronize) .vimrc'deki farklı ayarları etkinleştirmek istiyorum .
Yanıtlar:
En iyi yol kullanmaktır has()
, bu fonksiyonla Vim'in özelliklerini kontrol edebilirsiniz; İşletim sistemine özgü özellikler
: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)
Ve bazı eski (yarı kullanımdan kaldırılmış) sistemler:
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.
Örnek:
if has('win32')
echo "Someone please open the Window(s)!"
endif
Daha fazla esnekliğe sahip alternatif bir yol, harici uname
numarayı aramaktır ; bu, sürüm numarasını vb. Almanızı da sağlar:
let uname = system('uname -a')
uname
Çoğu Windows sisteminde bulunmadığını unutmayın .
OS algılama yerine özellik algılama kullanmak genellikle en iyisidir . Örneğin, özelliklerden birini kullanarak veya bazı yolların olup olmadığını kontrol ederek. 200_success 'gönderisi , bu konuda iyi bir genel bakış sunuyor, bu yüzden burada aynı içeriği tekrar etmeyeceğim.has()
:h feature-list
has()
iyi bir fikir gibi sesler Mac OS X üzerinde denemek sonu: varsayılan /usr/bin/vim
, has('unix')
olduğu doğrudur ama hem has('macunix')
ve has('mac')
olan sahte düzenli MacVim indirme, her üç vardır olurken gerçek GUI veya TUI kullanmak ister.
Bu yüzden en iyi çözüm, has('winXX')
Windows ve uname
unix benzeri sistemlerin bir karışımıdır . Yeni çıktılı uname
uçların çıktısının kullanımdan önce temizlenmesi gerektiğine dikkat edin.
Bir süredir kullandığım, güncellediğim kod 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
Ondan sonra, g:os
değişkeni içinde herhangi bir yerde kullanabilirsiniz 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
has('unix')
doğru. Yine has('macunix')
de yanlış olması garip . Bu neredeyse bir böcek gibi geliyor?
has('macunix')
bağlı gibi görünüyor MACOS_X_UNIX
eğer kümesi olan uname
bir Darwin
yer configure
... senaryo
has ("win32")
64-bit Vim'de bile benim için çalışıyor gibi görünüyor.
has('unix')
Windows Git Bash'te de geçerlidir, bu nedenle gerçek unix'i öykünmekten ayırmak çok kullanışlı değildir.
Çevre değişkenleri faydalı olacaktır.
Tespit tmux
etmek için if !empty($TMUX)
veya kontrol edebilirsiniz if $TERM == 'screen'
.
İşletim sistemini ayrıca $MACHTYPE
( Bash tarafından ayarlanan ) veya gibi ortam değişkenlerinden de çıkarabilirsiniz $PATH
.
TFS gibi bir özelliğin kurulu olup olmadığını tespit etmek için executable()
işlevi kullanabilirsiniz .
$MACHTYPE
. let machtype=system('echo -n $MACHTYPE')
İlk gibi bir şey yapman gerekecek .
Diğerlerinin de belirttiği gibi, güvenilir bir algılama zor olabilir. Tekerleği yeniden icat etmemek daha iyi, bu yüzden sağlayan ve çalışan vim-misc kütüphanesinden bahsetmek istiyorum .xolox#misc#os#is_mac()
xolox#misc#os#is_win()
Denedim has('unix')
, ancak tüm Linux, Mac ve Windows Git Bash'im true
bunun için geri döndüğü için faydalı olmadım .
uname
Çok fazla ayrıntı alanı olmadan Linux, Mac, Windows arasında ayrım yaptığı için uygun buldum .
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