Làm cách nào để phân biệt hệ điều hành hiện tại trong .vimrc của tôi?


20

Tôi sử dụng Vim trên cả OS X và Windows, với cấu hình gần như giống hệt nhau.

Tôi muốn có thể sử dụng tương tự .vimrctrên hai hệ điều hành, nhưng có một vài điều tôi cần cấu hình khác nhau.

Những gì tôi muốn thêm vào .vimrctập tin của tôi là:

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

Nhưng tôi không biết những gì để sử dụng cho <windows><os x>.

Điều này có thể không?

Câu trả lời:


30

NB Mặc dù cả hai câu trả lời trước đó đều cung cấp cho tôi đủ thông tin để tìm ra cách giải quyết vấn đề (và nhận được sự ủng hộ từ tôi), nhưng thực tế không đưa ra câu trả lời đầy đủ. Để những người khác có cùng câu hỏi không phải thực hiện nghiên cứu, tôi đang thêm câu trả lời của riêng mình. Tuy nhiên, nếu @googletorp hoặc @Azz chỉnh sửa câu trả lời của họ để bao gồm thông tin này, tôi sẽ xóa câu trả lời của tôi và chấp nhận câu trả lời của họ.

Kết quả cho :h feature-listthấy rằng bạn sẽ có thể sử dụng has("win32")has("macunix"), nhưng sau này không hoạt động trong phiên bản của Vim có trong OS X. (Nó làm , tuy nhiên, làm việc trong MacVim.)

Đây là những gì tôi đã kết thúc bằng cách sử dụng:

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

Lưu ý rằng nó has("win32")hoạt động với tôi, ngay cả trong Vim 64 bit trên Windows 64 bit.

Bạn cũng có thể sử dụng các thử nghiệm tương tự unametrong if has("unix")khối để phân biệt các hương vị khác của Unix. Chỉ cần chạy unamehoặc uname -atừ dòng lệnh để xem những gì bạn cần so sánh s:unamevới. Xem thêm :h matchstr()nếu bạn cần so sánh chỉ là một phần của unameđầu ra.


1
Đối với bản ghi: trong vim từ MSYS2 có ("unix") là 1, có ("win32") là 0 và có ("win32unix") là 1. Vì vậy, hãy sử dụng ("win32unix") để phân biệt.
dùng31389

4

Bạn có thể xem tại đây

Về cơ bản, bạn có thể sử dụng một trong hai has(), system():

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

2

Đây dường như là những gì bạn đang theo đuổi, tôi không hiểu lắm nên tôi sẽ liên kết với bạn.

/programming/2842078/how-do-i-detect-os-x-in-my-vimrc-file-so-certain-configurations-will-only-apply


Lạ thật. Điều đó dường như được loại bỏ từ stackoverflow.com/questions/2842078
Giàu

1
@Rich: Tất cả dữ liệu SU được cấp phép theo Creative Commons Attribution ShareAlike, mà chúng dường như tuân thủ.
Daniel Beck

@Daniel: Thú vị! Cảm ơn vì đã cho tôi biết.
Giàu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.