如何在VimScript中检测真实的操作系统?

如何在VimScript中检测真实的操作系统?,vim,vim-plugin,msys2,Vim,Vim Plugin,Msys2,我需要决定我需要选择哪个二进制可执行文件,所以我必须知道Vim运行的操作系统 我发现有一个相关的问题。但是has('win32')| | has('win64')解决方案对我不起作用,因为当我在Windows上使用msys2 Vim时,我将从has解决方案中获得0,因为has解决方案只告诉为哪个操作系统编译Vim,而不是告诉它正在哪个操作系统上运行 当我需要决定需要选择哪个二进制可执行文件时,我必须知道真正的操作系统。关于这个问题有什么好主意吗?来自: 定义包含当前环境名称的全局变量(如果尚未定

我需要决定我需要选择哪个二进制可执行文件,所以我必须知道Vim运行的操作系统

我发现有一个相关的问题。但是
has('win32')| | has('win64')
解决方案对我不起作用,因为当我在Windows上使用msys2 Vim时,我将从
has
解决方案中获得
0
,因为
has
解决方案只告诉为哪个操作系统编译Vim,而不是告诉它正在哪个操作系统上运行

当我需要决定需要选择哪个二进制可执行文件时,我必须知道真正的操作系统。关于这个问题有什么好主意吗?

来自:

定义包含当前环境名称的全局变量(如果尚未定义)

if !exists('g:env')
    if has('win64') || has('win32') || has('win16')
        let g:env = 'WINDOWS'
    else
        let g:env = toupper(substitute(system('uname'), '\n', '', ''))
    endif
endif
使用该全局变量

if g:env =~ 'DARWIN'
    " ... to do Mac OS X-specific stuff.
endif

if g:env =~ 'LINUX'
    " ... to do Linux-specific stuff.
endif

if g:env =~ 'WINDOWS'
    " ... to do Windows-specific stuff.
endif

if g:env =~ 'CYGWIN'
    " ... to do Cygwin-specific stuff.
endif

if g:env =~ 'MINGW'
    " ... to do MinGW-specific stuff (Git Bash, mainly).
endif

诸如此类。

没有答案,我也不知道,但在确定真正的操作系统后,你想运行什么可执行文件?@LievenKeersmaekers,比如LanguageClient neovim,它决定使用哪个可执行文件
has
现在:OP提到has('win32')| has('win64')解决方案对我不起作用?!这只是条件的前半部分,这将是错误的。第二部分将适用于他的案例。谢谢,我认为当我定义这个变量并自己使用它时,这个解决方案会很好地工作,但是如果我正在开发一个插件呢?按照你的想法,我想我必须定义一个全局变量作为配置选项,并告诉我的用户设置它,这似乎不是很聪明,因为操作系统应该是自动检测的…而且,如果我在.vimrc中将其定义为全局变量,那么我的.vimrc将无法在操作系统之间移植…而且,如果我在.vimrc中将其定义为一个全局变量,那么我的.vimrc将无法在操作系统之间移植。。。