gVim访问环境变量,包含特殊字符

时间:2016-02-26 05:51:18

标签: windows vim portability

PortableApps在使用其应用时会自动添加environment variables。但是,在使用gVimPortable访问名称中带有特殊字符的变量时,我会收到错误。

例如:执行时

:echo $PortableApps\.comDocuments

:echo $PortableApps.comDocuments

我收到以下错误:

E15: Invalid expression: \.comDocuments

E121: Undefined variable: comDocuments
E15: Invalid expression: $PortableApps.comDocuments

当我做

时,我遇到了类似的问题
:echo $PAL:Drive

PortableApps环境变量似乎都在那里。我做了一个:

:echo $<C-D>

他们被列出。

如何访问这些变量?

1 个答案:

答案 0 :(得分:0)

对于Vim,环境变量只能包含字母,数字和下划线。来自:h expand-env

…  Any non-id character (not a letter, digit or '_') may
follow the environment variable name. That character and what follows is
appended to the value of the environment variable.  Examples: 
   :set term=$TERM.new
   :set path=/usr/$INCLUDE,$HOME/include,.

因此,使用类似set something=$PortableApps.comDocuments的表达式,Vim仅将$PortableApps视为环境变量 - .comDocuments是附加到其上的字符串。对于echo $PortableApps.comDocuments.string concatenation operator,因此Vim会尝试取值 $PortableApps和变量comDocuments并加入它们。使用echo $PortableApps\.comDocuments,它会看到环境变量$PortableApps,然后是它无法理解的内容:\.comDocuments

如果您可以访问Vim的Python或Perl接口,则可以使用它们。例如,在使用:

启动Vim之后
env foo.bar=blah vim

以下两项都给出了输出blah

:perl VIM::Msg($ENV{"foo.bar"})
:python import os; print os.environ['foo.bar']

例如,在Python中,您可以将环境变量分配给Vim变量:

:python vim.vars['foobar'] = os.environ['foo.bar']

然后,您可以像任何其他Vim变量一样使用foobar

:echo foobar
blah

当然,在Windows上,您必须安装Python或Perl才能使用它。