Dapatkah saya mengambil sistem operasi saat ini (Windows, Linux, OS X, ..) menggunakan Vimscript murni (tanpa Python atau Perl)?
Saya ingin mengaktifkan berbagai pengaturan di .vimrc (disinkronkan) saya untuk berbagai jenis sistem operasi yang saya gunakan.
Jawaban:
Cara terbaik adalah menggunakan
has()
, dengan fungsi ini Anda dapat memeriksa fitur-fitur Vim; Fitur spesifik OS dari:help feature-list
:Dan beberapa sistem yang lebih tua (semi-usang):
Contoh:
Cara alternatif dengan lebih banyak fleksibilitas adalah dengan memanggil eksternal
uname
, ini juga memungkinkan Anda untuk mendapatkan nomor versi dan semacamnya:Catatan yang
uname
tidak ada pada kebanyakan sistem Windows.Biasanya lebih baik menggunakan deteksi fitur , daripada deteksi OS . Misalnya dengan menggunakan salah satu fitur di
has()
atau memeriksa apakah ada jalur. Posting 200_success memberikan ikhtisar yang bagus tentang itu, jadi saya tidak akan mengulangi konten yang sama di sini.sumber
:h feature-list
has()
terdengar seperti ide yang baik sampai Anda mencobanya di Mac OS X: di default/usr/bin/vim
,has('unix')
adalah benar namun keduahas('macunix')
danhas('mac')
yang palsu sementara, di reguler MacVim download, ketiganya benar apakah Anda menggunakan GUI atau TUI tersebut.Jadi solusi terbaik adalah campuran
has('winXX')
untuk Windows danuname
pada sistem seperti unix. Perhatikan bahwa keluaranuname
ujung dengan baris baru sehingga harus dibersihkan sebelum digunakan.Ini adalah kode yang saya gunakan untuk sementara waktu, diperbarui untuk
win64
:Setelah itu, Anda dapat menggunakan
g:os
variabel di mana saja divimrc
:sumber
has('unix')
akurat. Aneh kalauhas('macunix')
itu salah. Ini hampir terdengar seperti bug?has('macunix')
tampaknya bergantung padaMACOS_X_UNIX
, yang diatur jikauname
adaDarwin
dalamconfigure
skrip ...has ("win32")
tampaknya bekerja untuk saya bahkan dalam Vim 64-bit.has('unix')
ini juga berlaku pada Windows Git Bash, jadi tidak terlalu berguna untuk membedakan unix nyata dari yang ditiru.Variabel lingkungan akan bermanfaat.
Untuk mendeteksi
tmux
, Anda dapat memeriksaif !empty($TMUX)
atauif $TERM == 'screen'
.Anda juga dapat menyimpulkan sistem operasi dari variabel lingkungan seperti
$MACHTYPE
( yang ditetapkan oleh Bash ) atau$PATH
.Untuk mendeteksi apakah fitur seperti TFS diinstal, Anda dapat menggunakan
executable()
fungsi ini.sumber
$MACHTYPE
. Anda harus melakukan sesuatu sepertilet machtype=system('echo -n $MACHTYPE')
dulu.Seperti yang telah ditunjukkan orang lain, deteksi yang andal bisa rumit. Lebih baik tidak menemukan kembali roda, jadi saya ingin menyebutkan perpustakaan vim-misc , yang menyediakan
xolox#misc#os#is_mac()
danxolox#misc#os#is_win()
fungsi.sumber
Saya mencoba
has('unix')
, tetapi saya merasa tidak membantu karena semua Linux, Mac, dan Windows Git Bash saya kembalitrue
untuk itu.Saya menemukan
uname
cocok karena membedakan antara Linux, Mac, Windows, tanpa terlalu banyak rincian.sumber