如何在我的.vimrc文件中检测OS X,因此某些配置仅适用于OS X?

时间:2010-05-15 23:24:35

标签: macos vim

我在我的笔记本电脑(OS X)和几台服务器(Solaris和Linux)上使用我的.vimrc文件,并且可能假设有一天会在Windows机器上使用它。我知道如何检测unix和windows,但我如何检测OS X? (就此而言,有没有办法区分Linux和Solaris等。是否有一个列表中所有字符串'已'可以采取?我的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上使用。)

7 个答案:

答案 0 :(得分:49)

我的更新.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电话结束时使用换行符。您的里程可能会有所不同。

答案 1 :(得分:23)

我无法通过仅添加两个字符来编辑以前的答案:

这是正确的(通过我的macos 10.6和默认的vim控制台版本)

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

system(“uname”)会出现一个返回字符,如果条件失败则返回第二个字符。只需要一个小修补程序即可添加“\ n”。

答案 2 :(得分:14)

我正在做同样的事情。不要试图检测操作系统。相反,尝试检测vi / vim的类型。

检查:h feature-list以获取可以使用的条件的完整列表。

这是我在vimrc中用来检测MacVim的内容:

if has("gui_macvim")
  set guifont=Monaco:h13
endif

通过这种方式,您可以检测到gvim,vi,vim以及您可能使用的其他任何风格。好的是你可以在OS X上使用vim兼容的设置。

Reference from Vim Mailing list

编辑:此方法及其变体(has('mac')has('macunix')has('gui_mac'))在OS X中不适用于vim。如果仅使用MacVim,你很安全。如果你像我一样奇怪并喜欢偶尔跳进vim,其他一个解决方案可能更合适。

答案 3 :(得分:13)

自制vimMacVimhas('mac')返回true, 然而has('unix')也是如此。为了让它在所有unix平台上运行,可能的解决方案是:

if has('unix')
  if has('mac')       " osx
    set guifont=...
  else                " linux, bsd, etc
    set guifont=...
  endif
elseif has('win32') || has('win64')
  set guifont=...
endif

另一方面,从el capitan开始,系统vimhas('mac')返回false,而uname窥探可能是要走的路。这是一个古老的版本,从未使用它。

答案 4 :(得分:9)

你想要macunix。引用:h feature-list

mac     Macintosh version of Vim.
macunix Macintosh version of Vim, using Unix files (OS-X).

mac,AFAIK,仅适用于老式Mac,其中\ r是行分隔符。

答案 5 :(得分:5)

这是我找到的最简单的方法。

if system('uname -s') == "Darwin\n"
  "OSX
  set clipboard=unnamed 
else
  "Linux
  set clipboard=unnamedplus
endif

答案 6 :(得分:-2)

gui_macvim gui_gtk2 gui_gtk gui_win32

在stackoverflow上有一个操作系统检测脚本 - 找到它的更多关键字:win64 win95 macunix ...