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脚本中使用了吗?
您不需要!读取文件.
: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 的文字值这里有一些关于 vim 中斜杠和反斜杠的信息:
http://vimdoc.sourceforge.net/htmldoc/os_dos.html
当您更喜欢使用正斜杠时,请设置 'shellslash' 选项。然后,在扩展文件名时,Vim 会用正斜杠替换反斜杠。当使用类似 Unix 的“shell”时,这尤其有用。