ubuntu中的Vim无法识别我的环境变量

时间:2017-06-17 07:59:03

标签: bash shell ubuntu vim cygwin

有时我使用Cygwin,有时候我使用Ubuntu。由于我的vimrc中存在某些Ubuntu无法识别的内容,因此我创建了一个名为$ENV_TYPE的shell变量,该变量在我的.profile中手动设置以处理差异。

我的vimrc中有这样的东西:

if $ENV_TYPE == "cygwin"
    <some_command_here>
endif

当我在Ubuntu的命令行上运行echo $ENV_TYPE时,它会识别该变量。但是,在vim中,如果我运行相同的命令,它不会输出任何内容(这会阻止某些自定义命令无法识别)。

注意:这在Cygwin中根本不是问题。有想法该怎么解决这个吗?比使用手动设置的shell变量更好的方法也非常受欢迎。

1 个答案:

答案 0 :(得分:2)

Cygwin已经为您公开了许多特定于Cygwin的环境变量,因此您不需要定义自己的环境变量。使用以下命令从shell中列出它们:

$ env

或者这个从Vim列出它们:

:!env

选择一个Cygwin特有的内容,如$OS$PROGRAMFILES

if $OS == 'Windows_NT'
    " do cygwin stuff
endif

另一种选择可能是使用uname的输出:

if substitute(system('uname'), '\n', '', '') =~ 'CYGWIN'
    " do cygwin stuff
endif

这是一个“通用”代码段:

if !exists('g:os')
    if has('win32') || has('win16')
        let g:os = 'Windows'
    else
        let g:os = substitute(system('uname'), '\n', '', '')
    endif
endif

你这样使用:

if g:os =~ 'Windows'
    " do Windows stuff
endif

if g:os =~ 'CYGWIN'
    " do Cygwin stuff
endif

if g:os =~ 'MINGW'
    " do Git Bash stuff
endif

if g:os =~ 'Darwin'
    " do Mac OS X stuff
endif

if g:os =~ 'Linux'
    " do Linux stuff
endif