如何在Vim脚本中使用Windows环境变量?

Nic*_*man 8 windows vim environment

我有一个Vim脚本调用外部shell脚本并将输出读入当前缓冲区.它在Unix系统中运行良好.我正在尝试使脚本与操作系统无关,所以我希望它也适用于Windows用户.这是脚本中的相关行:

:exe ":0r !$HOME/bin/shell_script"
Run Code Online (Sandbox Code Playgroud)

根据Vim的文档,$HOME对Windows用户来说也应该很好.在命令模式下在Win XP上使用gvim,做

:echo $HOME
Run Code Online (Sandbox Code Playgroud)

确实产生了"C:\ Documents and Settings\my_user".

但是,我的Vim脚本(针对反斜杠调整)在Windows机器上失败,并在DOS cmd.exe窗口中显示消息

$ HOME\bin\shell_script"找不到.

换句话说,$HOME在将其传递给cmd.exe之前,Vim似乎没有扩展其值.

我也不能使用%APPDATA%,因为Vim解释%为当前文件并预先/附加文件名APPDATA.很奇怪,Vim 确实扩展%但不扩展$HOME.

如何$HOME正确扩展?是因为我exe在vim脚本中使用了吗?

kev*_*kev 6

您不需要!读取文件.

:exe ":0r $HOME/bin/shell_script"
Run Code Online (Sandbox Code Playgroud)

或者type在windows中读取命令(比如cat在linux中):

:exe '0r !type "'. $HOME . '\bin\shell_script"'
Run Code Online (Sandbox Code Playgroud)

注意:

  • type在Windows中执行的外壳,所以你需要\(反斜线),路径
  • 如果$HOME包含spaces,则需要"(双引号)来保留spaces 的文字值


Kam*_*mil 1

这里有一些关于 vim 中斜杠和反斜杠的信息:

http://vimdoc.sourceforge.net/htmldoc/os_dos.html

当您更喜欢使用正斜杠时,请设置 'shellslash' 选项。然后,在扩展文件名时,Vim 会用正斜杠替换反斜杠。当使用类似 Unix 的“shell”时,这尤其有用。