首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在.vimrc文件中检测OS X,以便某些配置仅适用于OS X?

如何在.vimrc文件中检测OS X,以便某些配置仅适用于OS X?
EN

Stack Overflow用户
提问于 2010-05-16 07:24:35
回答 6查看 17.7K关注 0票数 52

我在我的笔记本电脑(OS )和几个服务器(Solaris和Linux)上使用我的.vimrc文件,假设有一天可以在Windows机器上使用它。我知道如何检测unix和windows,但我如何检测OS?(就此而言,有没有一种方法可以区分Linux和Solaris,等等。还有,有没有一个'has‘可以接受的所有字符串的列表?我的Google-fu没有找到任何东西。)

例如,我会使用这样的东西:

代码语言:javascript
复制
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上使用。)

EN

回答 6

Stack Overflow用户

发布于 2010-05-16 14:51:47

我更新的.vimrc现在使用以下内容:

代码语言:javascript
复制
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中做的事情:

代码语言:javascript
复制
if has("unix")
  let s:uname = system("uname -s")
  if s:uname == "Darwin"
    " Do Mac stuff here
  endif
endif

不过,为了完全透明,我的实际.vimrc是:

代码语言:javascript
复制
let s:uname = system("echo -n \"$(uname)\"")
if !v:shell_error && s:uname == "Linux"

主要用于检测Linux (与OSX相对)

我不确定您是否一定要执行echo -n \"$(uname)\"操作,但它与uname调用末尾的换行符有关。您的里程可能会有所不同。

票数 52
EN

Stack Overflow用户

发布于 2011-02-23 23:44:48

我无法通过仅添加两个字符来编辑上一个答案:

这是一个正确的版本(在我的MacOS10.6和默认的vim控制台版本上传递)

代码语言:javascript
复制
if has("unix")
  let s:uname = system("uname")
  if s:uname == "Darwin\n"
    " Do Mac stuff here
  endif
endif

system("uname")会返回一个字符,这使得第二个if条件失败。只是添加"\n“的一个小修复。

票数 24
EN

Stack Overflow用户

发布于 2016-01-25 18:26:02

对于has('mac'),homebrew vimMacVim返回true,但是has('unix')也是如此。因此,要让它在所有unix平台上工作,一个可能的解决方案是:

代码语言:javascript
复制
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侦听可能是可行的方法。这是一个古老的版本,从来没有用过。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2842078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档