我如何检测我的.vimrc文件中的OS X,所以某些configuration只适用于OS X?

我在我的笔记本电脑(OS X)和几台服务器(Solaris和Linux)上使用我的.vimrc文件,假设有一天会在Windows上使用它。 我知道如何检测一般的UNIX和Windows,但我如何检测OS X? (就此而言,是否有一种方法可以区分Linux和Solaris等等。有没有一个列表中的某个string可以使用?我的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”不是正确的string,也没有其他我尝试过的。


更新:下面的答案(“macunix”)似乎相当清楚,它应该工作,但由于某种原因它不。 (也许苹果没有正确编译vim来回应这个问题,似乎不大可能。)

无论如何,我想我需要转移问题的焦点:有没有人有一个解决scheme,将达到相同的目的? (即,成功检测到在Mac OS X上正在使用.vimrc文件。)

你可以尝试在我的.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调用结束时使用换行符。 你的旅费可能会改变。

我不能通过只添加两个字符来编辑以前的答案:

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

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

系统(“uname”)会产生一个返回字符,如果条件失败,则返回秒。 只是一个小的修复添加“\ n”。

我正在做同样的事情。 不要尝试检测操作系统。 而是尝试检测vi / vim的types。

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

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

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

有了这个,你可以检测到gvim,vi,vim和其他任何你可能使用的风格。 好的是,你可以在OS X上有vim兼容的设置。

从Vim邮件列表中引用

编辑:这个方法及其变种( has('mac')has('macunix')has('gui_mac') )在OS X中不适用于vim。如果仅使用使用MacVim,则是安全的。 如果你像我一样奇怪,偶尔会跳入vim,其他解决scheme可能更适合。

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

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

mac,AFAIK,只适用于老派的Mac,其中\ r是行分隔符。

homebrew vimMacVimhas('mac')返回true,但是也has('unix') 。 所以要在所有的Unix平台上工作,一个可能的解决scheme是:

 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 snooping可能就是要走的路。 这是一个古老的版本,从来没有使用过它。

这是我find的最简单的方法。

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

gui_macvim gui_gtk2 gui_gtk gui_win32

有一个操作系统检测脚本在stackoverflow – 更多的关键字find它:win64 win95 macunix …