我在我的笔记本电脑(OS )和几个服务器(Solaris和Linux)上使用我的.vimrc文件,假设有一天可以在Windows机器上使用它。我知道如何检测unix和windows,但我如何检测OS?(就此而言,有没有一种方法可以区分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")似乎相当清楚,它应该工作,但由于某些原因,它不是。(也许苹果没有正确地编译vim来回应这个问题?看起来不太可能。)
无论如何,我想我需要转移问题的焦点:有没有人有可以达到同样目的的解决方案?(即,成功检测到.vimrc文件正在Mac OS X上使用。)
发布于 2010-05-16 14:51:47
我更新的.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
调用末尾的换行符有关。您的里程可能会有所不同。
发布于 2011-02-23 23:44:48
我无法通过仅添加两个字符来编辑上一个答案:
这是一个正确的版本(在我的MacOS10.6和默认的vim控制台版本上传递)
if has("unix")
let s:uname = system("uname")
if s:uname == "Darwin\n"
" Do Mac stuff here
endif
endif
system("uname")会返回一个字符,这使得第二个if条件失败。只是添加"\n“的一个小修复。
发布于 2016-01-25 18:26:02
对于has('mac')
,homebrew vim
和MacVim
返回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,has('mac')
的系统vim
返回false,而uname
侦听可能是可行的方法。这是一个古老的版本,从来没有用过。
https://stackoverflow.com/questions/2842078
复制相似问题