Macos 如何在.vimrc文件中检测OS X,以便某些配置仅适用于OS X?
我在我的笔记本电脑(OSX)和几个服务器(Solaris和Linux)上使用我的.vimrc文件,并且假设有一天可以在Windows机箱上使用它。我知道如何检测unix和windows,但如何检测OSX?(就这一点而言,是否有办法区分Linux和Solaris等,是否有一个列表,列出了“has”可以使用的所有字符串?我没有找到任何结果。) 例如,我会使用这样的东西: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
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”功能。请参阅:@Charlesosx
确实不错,但是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