【发布时间】:2013-05-18 16:45:11
【问题描述】:
当我从 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
【问题讨论】:
-
您是否尝试在
msys用作配置文件的内容中更改$HOME的值?类似export $HOME="C:\Documents and Settings\username"。 -
是的,如果提前正确设置了
HOME,gvim 将从 msys 工作。 (虽然语法是export HOME="C:\Documents and Settings\username",但没有'$')。但是就像我说的那样,我需要一种方法,以便gvim.exe可以看到HOME的正确值,而无需为shell 全局更改HOME。有没有办法export只针对单个命令? -
我对 Windows 命令行的了解非常接近
0,但在*sh我可以做到$ HOME='/path/to/dir' vim filename。不过要小心这种方法,因为$HOME设置为与默认位置不同的位置,Vim 不会看到你的_vimrc或vimfiles,除非你把它们放在那个新的$HOME中。此外,由于新的$HOME,使用msys提供的命令可能更难甚至不可能。我会说“复制你的文件或使用符号链接”。 -
第一个建议可以解决问题。 gvim 看到 Windows 值
HOME,而不是 msys 的HOME,但是当我返回 shell 时,msys HOME 没有改变。如果您将其重新发布为答案,我将接受它。放弃我的 windows vim 设置的建议完全不是我想要的(并且违背了 vim 的搜索路径为 windows 配置的方式:))。 -
我不认为我建议你放弃你的 Vim 设置。将其复制到另一个位置或符号链接绝对与“放弃”不同。
标签: vim environment-variables sh msys