私は自分の .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
。結果は人によって異なる可能性があります。