gVim 访问具有特殊字符的环境变量

gVim access environment variable with special characters

PortableApps 自动添加 environment variables when using their apps. However, while using 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>

它们已被列出。

如何访问这些变量?

对于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 才能使用它。