Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在.vimrc文件中检测OS X,以便某些配置仅适用于OS X?_Macos_Vim - Fatal编程技术网

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

Macos 如何在.vimrc文件中检测OS X,以便某些配置仅适用于OS X?,macos,vim,Macos,Vim,我在我的笔记本电脑(OSX)和几个服务器(Solaris和Linux)上使用我的.vimrc文件,并且假设有一天可以在Windows机箱上使用它。我知道如何检测unix和windows,但如何检测OSX?(就这一点而言,是否有办法区分Linux和Solaris等,是否有一个列表,列出了“has”可以使用的所有字符串?我没有找到任何结果。) 例如,我会使用这样的东西: if has("mac") " open a file in TextMate from vi: " nmap mate

我在我的笔记本电脑(OSX)和几个服务器(Solaris和Linux)上使用我的.vimrc文件,并且假设有一天可以在Windows机箱上使用它。我知道如何检测unix和windows,但如何检测OSX?(就这一点而言,是否有办法区分Linux和Solaris等,是否有一个列表,列出了“has”可以使用的所有字符串?我没有找到任何结果。)

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

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”)
“从vi在TextMate中打开文件:”
nmap大副:w:!配偶%
elseif有(“unix”)
“在linux和
elseif有(“win32”)
“在windows下执行任务”
恩迪夫
但很明显,“mac”不是正确的字符串,我尝试过的其他任何字符串也不正确


更新: 下面的答案(“macunix”)似乎相当清楚地表明它应该工作,但由于某些原因它没有工作。(也许苹果没有正确编译vim来应对这个问题?似乎不太可能。)


无论如何,我想我需要转移问题的焦点:有没有人有一个解决方案可以达到同样的目的?(也就是说,成功检测到.vimrc文件正在Mac OS X上使用。)

您想要
macunix
。引用
:h功能列表

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

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

我的更新版
。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中所做的。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控制台版本上传递)


系统(“uname”)将产生一个返回字符,如果条件失败,则返回第二个字符。只需添加一个小补丁“\n”。

我正在做与您相同的事情。不要试图检测操作系统。相反,尝试检测vi/vim的类型

检查
:h功能列表
,查看可使用的条件的完整列表

以下是我在vimrc中检测MacVim的方法:

if has("gui_macvim")
  set guifont=Monaco:h13
endif
有了它,您可以检测gvim、vi、vim以及您可能使用的任何其他口味。很好的一点是,你可以在OSX上设置与vim兼容的设置


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

gui\u macvim gui\u gtk2 gui\u gtk gui\u win32


stackoverflow上的某个位置有一个操作系统检测脚本-要找到更多关键字:win64 win95 macunix…

自制
vim
,并且
MacVim
has('mac')
返回true, 然而,
也有('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
窥探可能是一种方法。这是一个古老的版本,从未使用过。

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

if system('uname -s') == "Darwin\n"
  "OSX
  set clipboard=unnamed 
else
  "Linux
  set clipboard=unnamedplus
endif

谢谢,这看起来应该行得通,但出于某种原因,它不行。如果我将我的“mate”命令放在If块之外,它就会工作。但如果我把它放在“if has”(“macunix”)之后,它就会失败。有什么想法吗?我猜
mac
指的是老式的MacOS(在基于Unix的osx之前)。现在vim有了“osx”功能。请参阅:@Charles
osx
确实不错,但是
nvm
在编写时没有。好的,这看起来非常有用,但我是否有可用的TextMate完全取决于操作系统,而不是取决于它是GUI版本还是vim的正常版本。所以就我的目的而言,我不确定这对我有多大帮助。我有一个用TextMate打开文件的命令,这只适用于我在OS X上的情况,如果我在Windows或Linux上,我可能会添加类似的命令,用Sublime文本打开当前文件。我几乎从未使用过vim的GUI版本,只是在终端中使用普通的vim。(我发现MacVim让人迷失方向:它不像一个真正的Cocoa应用程序,它也不是终端应用程序。)啊,我不知道TextMate可以使用vimrc文件TextMate不使用.vimrc文件,但我在.vimrc文件中放了一个命令,在TextMate中打开当前文件。如果我使用的是OS X,我只需键入:mate并在TextMate中获得相同的文件,然后使用它的一些非常方便的功能,如bundle等@iconolast bundles?别再说了!+也许其他人没有遇到这个问题,但如果s:uname==“Darwin\n”@JasonAxelson您可以使用替换来删除
\n
让s:uname=substitute(系统(“uname”),“\n”和“,”)
@rossipedia,因为您似乎希望通过测试
具有可移植性(“unix”)
,您应该使用
uname-s
而不是
uname
@abeaumet correct,这将是最方便的方法,您可以使用
if(system('uname')=~“darwin”)
进行regexp匹配。在
vim
中,请参见
':h=~'
了解其他选项,例如,指定区分大小写的
具有(“macunix”)
适用于自制安装的vim版本,目前为7.4.1-936。我已经测试过了,这是最好的解决方案。我猜它的升级票太少是因为它更新了几年,但它是一个更简单、同样有效的解决方案。在Mac上使用Brew的Vim 8。
if system('uname -s') == "Darwin\n"
  "OSX
  set clipboard=unnamed 
else
  "Linux
  set clipboard=unnamedplus
endif