代码之家  ›  专栏  ›  技术社区  ›  iconoclast

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

  •  48
  • iconoclast  · 技术社区  · 14 年前

    我在笔记本电脑(OSX)和几台服务器(Solaris&Linux)上使用.vimrc文件,并假设有一天会在Windows系统中使用它。我知道如何检测unix和windows,但如何检测os x呢?(关于这个问题,有没有办法区分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上使用。)

    7 回复  |  直到 14 年前
        1
  •  49
  •   rossipedia    6 年前

    我的更新 .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
    

    我的原始答案如下


    你可以试试我做的。

    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 打电话。你的里程可能不同。

        2
  •  23
  •   Gene Wu    13 年前

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

    这是正确的一个(在我的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”的小修补程序。

        3
  •  14
  •   Eric Hu    11 年前

    我和你做的一样。不要试图检测操作系统。相反,尝试检测vi/vim的类型。

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

    下面是我用来检测我的vimrc中macvim的方法:

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

    有了这个,你可以检测出gvim,vi,vim,以及你可能使用的其他口味。好在你可以在OSX上设置与VIM兼容的设置。

    Reference from Vim Mailing list

    编辑: 这种方法及其变体( has('mac') , has('macunix') , has('gui_mac') )不要在OSX中为VIM工作。如果你只使用MacVim,你是安全的。如果你像我一样怪异,喜欢偶尔跳进vim,其他的解决方案之一可能更合适。

        4
  •  13
  •   minusf    8 年前

    自制的 vim MacVim 返回true has('mac') , 不过,情况也是如此 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
    

    另一方面,从埃尔卡皮坦开始, vim 返回false has('mac') uname 窥探可能是个好办法。这是一个古老的版本,从未使用过。

        5
  •  9
  •   Michael Madsen    14 年前

    你想要的 macunix . 引用 :h feature-list :

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

    mac,afaik,仅适用于旧式mac,其中\r是行分隔符。

        6
  •  6
  •   Weston Ganger    8 年前

    这是我找到的最简单的方法。

    if system('uname -s') == "Darwin\n"
      "OSX
      set clipboard=unnamed 
    else
      "Linux
      set clipboard=unnamedplus
    endif
    
        7
  •  -2
  •   skurczybyk    12 年前

    gui_macvim gui_gtk2 gui_gtk gui_win32

    stackoverflow上有一个操作系统检测脚本-更多关键字可以找到它:win64 win95 macunix…