我有一个调用外部shell脚本的Vim脚本,并将输出读入当前缓冲区。 它在Unix系统中工作正常。 我试图使脚本 *** 作系统不可知,所以我希望它也适用于windows用户。 以下是脚本中的相关行:
:exe ":0r !$HOME/bin/shell_script"
根据Vim的文档, $HOME应该适用于windows用户。 在Win XP上以命令模式使用gvim,
:echo $HOME
确实产生“C: documents and Settings my_user”。
但是,我的Vim脚本(调整为反斜杠)在windows机器上失败,并在DOS cmd.exe窗口中显示一条消息
更改anaconda中的默认环境
在windows上保存依赖于机器(不是用户)的ini文件的位置
windows的JAVA HOME问题
在batch file中设置windows环境variables
环境variables是否联想?
$ HOME bin shell_script“找不到。
换句话说,在传递给cmd.exe之前,Vim似乎不会扩展$HOME的值。
我无法使用%APPDATA% ,因为Vim将%解释为当前文件,并将文件名预先/附加到APPDATA 。 Vim 确实扩展了%但不扩展$HOME 。
如何正确地扩展$HOME ? 是因为我在vim脚本中使用exe ?
在linux中以编程方式在C中检测桌面环境
linux系统中的多个JRE
如何创build可以快速分发到本地机器的可定制环境?
如何在jenkins build中激活conda环境
如何为windows和linux电脑设置常见的emacs环境?
你不需要! 读取文件。
:exe ":0r $HOME/bin/shell_script"
或者在windows中读取type命令(如在linux中的cat ):
:exe '0r !type "'. $HOME . 'binshell_script"'
注意:
该type在windows外壳中执行,所以你需要在路径中的 (反斜杠)
如果$HOME包含space s,则需要" (双引号)来保留space s的文字值
澄清由kev给出的答案:
在windows上,当您转到控制台时,$ HOME变量不能正确展开。 例如,考虑这个代码:
:e $HOME/myscript
这是可行的,因为vim正常扩展了$ HOME。 另一方面,这将无法正常工作:
:%! $HOME/myscript
为什么? 因为vim经过了一切! 到底层的shell,它在windows上是cmd.exe ,它执行环境变量%liKE_THIS% 。 如果你尝试使用这个符号,vim会跳进来并且把%扩展到当前文件的名字 – 去图。
如何解决它? 使用exe关键字:
:exe "%! ".$HOME."myscript"
我们来分析一下:
:exe是一个接受一个字符串并对其进行评估的命令(想想大多数语言中的eval)
"!% "转义为shell命令。 请注意,它被引用,以便exe可以评估它。 另外请注意,在那里有一个额外的空间,所以当我们追加主var时,它不是,而是正确的
.$HOME点是一个字符串连接符号。 $HOME不在引号内,而是连接在一起,以便vim可以正确地扩展它
."/myscript"路径和可能的参数(也被引用)
这里最重要的是把$HOME保留在引号之外,否则可能在windows上不能正确的扩展。
你可能需要像expand功能的东西。 例如:
:echo expand("$HOME/hello") /home/amir/hello
你可以找到更多有关expand()的信息:help expand 。
这里有一些关于vim中斜杠和反斜杠的信息:
http://vimdoc.sourceforge.net/HTMLdoc/os_dos.HTML
当你喜欢使用正斜杠时,设置'shellslash'选项。 当扩展文件名时,Vim将用正斜杠替换反斜杠。 这在使用类Unix的“shell”时特别有用。
总结以上是内存溢出为你收集整理的如何在Vim脚本中使用Windows环境variables?全部内容,希望文章能够帮你解决如何在Vim脚本中使用Windows环境variables?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)