我在我的笔记本电脑(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上使用。)
答案 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)
自制vim
和MacVim
对has('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开始,系统vim
对has('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 ...