.vimrc ファイルで OS X を検出して、特定の設定が OS X にのみ適用されるようにするにはどうすればよいでしょうか? 質問する

.vimrc ファイルで OS X を検出して、特定の設定が OS X にのみ適用されるようにするにはどうすればよいでしょうか? 質問する

私は自分の .vimrc ファイルをラップトップ (OS X) といくつかのサーバー (Solaris と Linux) で使用しており、将来的には Windows ボックスで使用する可能性があります。UNIX と Windows の一般的な検出方法は知っていますが、OS X を検出するにはどうすればよいでしょうか? (また、Linux と Solaris などを区別する方法はありますか? また、'has' に使用できるすべての文字列のリストはどこかにありますか?Google-fu何も見つかりませんでした。

たとえば、次のようなものを使います:

if has("mac")
  " open a file in TextMate from vi: "
  nmap mate :w<CR>:!mate %<CR>
elseif has("unix")
  " do stuff under linux and "
elseif has("win32")
  " do stuff under windows "
endif

しかし、明らかに「mac」は正しい文字列ではなく、私が試した他の文字列も正しい文字列ではありません。


更新:以下の回答(「macunix」)は明らかにそれと似ているようですすべき動作しますが、何らかの理由で動作しません。(おそらく Apple はこれに対応するために vim を適切にコンパイルしなかったのでしょうか? 可能性は低いようです。)

いずれにせよ、質問の焦点を変える必要があると思います。同じ目的を達成する解決策を持っている人はいますか? (つまり、.vimrc ファイルが Mac OS X で使用されていることを正常に検出します。)

ベストアンサー1

私の更新版.vimrcでは以下を使用しています:

if has("gui_running")
  " Gvim
  if has("gui_gtk2") || has("gui_gtk3")
    " Linux GUI
  elseif has("gui_win32")
    " Win32/64 GVim
  elseif has("gui_macvim")
    " MacVim
  else
    echo "Unknown GUI system!!!!"
  endif
else
  " Terminal vim
endif

私の元の回答は以下の通りです


私が .vimrc でやっていることを試してみてください:

if has("unix")
  let s:uname = system("uname -s")
  if s:uname == "Darwin"
    " Do Mac stuff here
  endif
endif

ただし、完全に透明性を保つために、実際の .vimrc は次のようになります。

let s:uname = system("echo -n \"$(uname)\"")
if !v:shell_error && s:uname == "Linux"

主に Linux を検出するため (OSX とは対照的)

絶対にそうしなければならないかどうかはわかりませんecho -n \"$(uname)\"が、通話終了時の改行に関係していましたuname。結果は人によって異なる可能性があります。

おすすめ記事