从MSYS运行vim ---如何避免/更改MSYS环境变量?

时间:2013-05-18 16:45:12

标签: vim environment-variables sh msys

当我从MSYS运行gvim时,在初始化期间出现问题。即,gvim找不到“C:\Documents and Settings\username\vimfiles

中的初始化文件

[具体来说,gvim在初始化期间报告错误E117: Unknown function: pathogen#infect,因此它从未找到autoload\pathogen.vim。执行:scriptnames也会确认vimfiles\中没有任何设置文件正在运行。]

我想我已经调试了它出错的原因。当您启动MSYS时,MSYS shell继承了Windows环境变量,但将其中一些更改为其自定义值。 C:\Documents and Settings\username是Windows中$HOME的值,但MSYS将其设置为C:/msys/user name。当然,Vim使用$HOME来查找正确的初始化文件。

我还注意到set shell?已更改为shell=C:/msys/bin/sh而不是shell=C:\WINDOWS\system32\cmd.exe,但我希望这对修复初始化问题并不重要。

我需要使用正常的Windows环境变量运行gvim。至少我需要能够手动覆盖一些重要的,如$HOME到我指定的东西(即,我不关心我的窗口$HOME更改,所以使用静态值是好的)。

我尝试在我的vimrc中手动重置$HOME,但到那时为时已晚。

是否有一些技巧可以在初始化期间尽早指定$HOME,或者作为额外的命令行参数?

或者,是否有一些以msys运行命令的技巧不同?我几乎不知道shell C:/msys/bin/sh是如何工作的,但是我可以设想一些额外的参数来改变你输入的命令的可见环境(例如gvim.exe)。

--- ---编辑
重新发布有效的解决方案(它实现了后来的想法):

运行命令gvim.exe

,而不是运行HOME="C:\Documents and Settings\username" gvim.exe

4 个答案:

答案 0 :(得分:2)

bash和其他UNIX shell中,您可以执行以下操作:

$ HOME='/path/to/dir' gvim

暂时将$HOME设置为其他值。

我承认我对Windows命令行并不熟悉,但可能值得一试。

答案 1 :(得分:0)

我相信你可以像任何其他环境变量一样定义$ HOME 请尝试将此添加到.vimrc

的开头
let $HOME="C:\Documents and Settings\username"

答案 2 :(得分:0)

我在运行Cygwin时遇到了类似的问题(类似于MSYS)。

对我来说最简单的解决方案是将HOME环境变量设置为空字符串。否则,Cygwin HOME值将附加到GVim中的Windows USERPROFILE,并且无法正确启动。未明确设置HOME的完整路径意味着我可以在USERNAME可能不同的不同系统上使用相同的启动文件。

同样,SHELL环境变量不应继承自Cygwin Bash。通过shell运行!或外部程序时,会出现错误。再次,我将此设置为一个空变量,因为Vim足够聪明,可以弄清楚它应该是什么。

在我的.bashrc中,我为运行Windows gvim设置了以下别名,启动GVim,HOMESHELL变量设置为空字符串 - 只为此命令。

gvim="/cygdrive/c/Program Files (x86)/Vim/vim74/gvim"
if [ -x "$gvim" ]; then
  alias gvim="HOME= SHELL= \"$gvim\""
fi
unset gvim

答案 3 :(得分:0)

我通过建立Windows符号链接(Win 7或更高版本)来实现这一目标。

通过符号链接,您甚至可以使casasslidevim使用相同的配置和插件。