我如何检测我的.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 vim
和MacVim
对has('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一样,系统vim
对has('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 …