Wie kann ich das aktuelle Betriebssystem in meinem .vimrc unterscheiden?

20

Ich verwende Vim unter OS X und Windows mit nahezu identischer Konfiguration.

Ich möchte dasselbe .vimrcauf den beiden Betriebssystemen verwenden können, aber es gibt einige Dinge, die ich unterschiedlich konfigurieren muss.

Was ich meiner .vimrcDatei hinzufügen möchte, ist:

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

Aber ich weiß nicht , was für die Verwendung <windows>und <os x>.

Ist das möglich?

Reich
quelle

Antworten:

30

NB Obwohl beide vorherigen Antworten mir genügend Informationen gaben, um herauszufinden, wie das Problem zu lösen ist (und ich dafür positive Stimmen erhielt), gaben beide nicht die vollständige Antwort. Damit andere mit der gleichen Frage nicht recherchieren müssen, füge ich meine eigene Antwort hinzu. Wenn jedoch @googletorp oder @Azz ihre Antwort bearbeiten, um diese Informationen einzuschließen, entferne ich meine Antwort und akzeptiere ihre.

Die Ausgabe :h feature-listzeigt , dass Sie sollten in der Lage zu verwenden has("win32")und has("macunix"), aber letztere nicht eingeschlossen in OS X in der Version von Vim arbeiten (Es tut jedoch Arbeit in MacVim.)

Folgendes habe ich letztendlich verwendet:

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

Beachten Sie, dass es has("win32")bei mir auch in 64-Bit-Vim unter 64-Bit-Windows funktioniert hat.

Sie können auch ähnliche Tests unameinnerhalb des if has("unix")Blocks verwenden, um andere Unix-Varianten zu unterscheiden. Führen Sie einfach unameoder uname -aüber die Befehlszeile aus, um zu sehen, womit Sie vergleichen müssen s:uname. Siehe auch, :h matchstr()wenn Sie nur einen Teil der unameAusgabe vergleichen müssen.

Reich
quelle
1
Zur Aufzeichnung: in vim von MSYS2 ist has ("unix") 1, has ("win32") ist 0 und has ("win32unix") ist 1. Verwenden Sie also has ("win32unix"), um es zu unterscheiden.
user31389
4

Sie können einen Blick hier

Grundsätzlich können Sie entweder has(), system():

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