2013-05-18 51 views
2

当我从MSYS运行gvim时,初始化过程中出现错误。即,gvim找不到'C:\Documents and Settings\username\vimfiles中的初始化文件。从MSYS运行gvim ---如何避免/更改MSYS环境变量?

[具体而言,gvim在初始化期间报告错误E117: Unknown function: pathogen#infect,所以它从未找到autoload\pathogen.vim。做:scriptnames也确认没有任何来自vimfiles\的设置文件运行。]

我想我已经调试了它为什么出错。当您启动MSYS时,MSYS外壳会继承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

+0

您是否尝试在'msys'用作配置文件时更改'$ HOME'的值?像'export $ HOME =“C:\ Documents and Settings \ username”'。 – romainl

+0

是的,如果'HOME'预先设置正确,gvim将从msys工作。 (虽然没有'$',语法是export HOME =“C:\ Documents and Settings \ username”)。但正如我所说的,我需要一种方法,使'gvim.exe'能够在不改变shell的全局'HOME'的情况下看到'HOME'的正确值。有没有办法只为一个命令“输出”? – Ein

+1

我对Windows命令行的了解*非常接近于'0',但是在'* sh'中我可以执行'$ HOME ='/ path/to/dir'vim filename'。不过,要小心这种方法,因为'$ HOME'被设置为与默认值不同的位置,除非将它们放在新的'$ HOME'中,否则Vim将不会看到你的'_vimrc'或'vimfiles'。另外,由于新的'$ HOME',使用'msys'提供的命令可能更难甚至不可能。我会说“复制你的文件或使用符号链接”。 – romainl

回答

2

bash和其他的UNIX shell,你可以这样做:

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

临时设置$HOME为不同的值。

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

0

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

let $HOME="C:\Documents and Settings\username" 
+0

我试过了,但是当vimrc是第一个要执行的文件时,要改变vim使用的其他初始化文件的'$ HOME'的值为时已晚。 – Ein

+0

@Ein哦,好的。你可以试试'vim --cmd'let $ HOME =“C:\ Documents and Settings \ username”''? – timss

+0

这不起作用。它会设置'$ HOME',但不是在初始化之前。 (反斜杠也需要在双引号内加倍。) – Ein

0

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

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

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

在我.bashrc,我设置为运行Windows gvim以下别名与设置为空字符串HOMESHELL变量开始gVim的 - 只为该命令。

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