Bagaimana saya bisa membedakan sistem operasi saat ini di .vimrc saya?

20

Saya menggunakan Vim pada OS X dan Windows, dengan konfigurasi yang hampir sama.

Saya ingin dapat menggunakan yang sama .vimrcpada dua sistem operasi, tetapi ada beberapa hal yang perlu saya konfigurasi secara berbeda.

Yang ingin saya tambahkan ke .vimrcfile saya adalah:

:if <windows>
  "some windows-specific settings here
:elseif <os x>
  "some os x-specific settings here
:endif

Tapi saya tidak tahu untuk apa menggunakan <windows>dan <os x>.

Apakah ini mungkin?

Kaya
sumber

Jawaban:

30

NB Meskipun kedua jawaban sebelumnya memberi saya informasi yang cukup untuk mencari tahu bagaimana menyelesaikan masalah (dan menerima suara positif dari saya), tidak ada yang benar-benar memberikan jawaban lengkap. Agar orang lain dengan pertanyaan yang sama tidak perlu melakukan penelitian, saya menambahkan jawaban saya sendiri. Namun, jika @googletorp atau @Azz mengedit jawaban mereka untuk memasukkan info ini, saya akan menghapus jawaban saya dan menerima jawaban mereka.

Output ke :h feature-listmenunjukkan bahwa Anda harus dapat menggunakan has("win32")dan has("macunix"), tetapi yang terakhir tidak bekerja di versi Vim termasuk dalam OS X. (Ini tidak , bagaimanapun, bekerja di MacVim.)

Inilah yang akhirnya saya gunakan:

if has("win32")
  "Windows options here
else
  if has("unix")
    let s:uname = system("uname")
    if s:uname == "Darwin\n"
      "Mac options here
    endif
  endif
endif

Catatan yang has("win32")bekerja untuk saya, bahkan dalam 64 bit Vim pada Windows 64 bit.

Anda juga bisa menggunakan tes serupa unamedi dalam if has("unix")blok untuk membedakan rasa Unix lainnya. Jalankan saja unameatau uname -adari baris perintah untuk melihat apa yang perlu Anda bandingkan s:uname. Lihat juga :h matchstr()jika Anda perlu membandingkan hanya sebagian dari unameoutput.

Kaya
sumber
1
Sebagai catatan: dalam vim dari MSYS2 memiliki ("unix") adalah 1, memiliki ("win32") adalah 0 dan memiliki ("win32unix") adalah 1. Jadi gunakan has ("win32unix") untuk membedakannya.
user31389
4

Anda bisa melihatnya di sini

Pada dasarnya, Anda dapat menggunakan salah has(), system():

let os = substitute(system('uname'), "\n", "", "")
if os == "SunOS"
  ..
endif  
googletorp
sumber