【问题标题】:Running gvim from MSYS --- how to avoid/change MSYS enviroment variables?从 MSYS 运行 vim --- 如何避免/更改 MSYS 环境变量?
【发布时间】: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 不会看到你的_vimrcvimfiles,除非你把它们放在那个新的$HOME 中。此外,由于新的$HOME,使用msys 提供的命令可能更难甚至不可能。我会说“复制你的文件或使用符号链接”。
  • 第一个建议可以解决问题。 gvim 看到 Windows 值 HOME,而不是 msys 的 HOME,但是当我返回 shell 时,msys HOME 没有改变。如果您将其重新发布为答案,我将接受它。放弃我的 windows vim 设置的建议完全不是我想要的(并且违背了 vim 的搜索路径为 windows 配置的方式:))。
  • 我不认为我建议你放弃你的 Vim 设置。将其复制到另一个位置或符号链接绝对与“放弃”不同。

标签: vim environment-variables sh msys


【解决方案1】:

bash 和其他 UNIX shell 中,您可以这样做:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我试过这个,但是虽然 vimrc 是第一个要执行的文件,但要更改 vim 用于其他初始化文件的 $HOME 的值已经太晚了。
    • @Ein 哦,好的。你能试试vim --cmd 'let $HOME = "C:\Documents and Settings\username"'吗?
    • 这不起作用。它将设置$HOME,但不会在初始化之前设置。 (反斜杠也需要在双引号内加倍。)
    • @Ein 我明白了。我实际上并没有尝试使用反斜杠,因为我没有在 Windows 上使用 Vim,对此感到抱歉。
    【解决方案3】:

    我在运行 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
    

    【讨论】:

      【解决方案4】:

      我通过创建 Windows 符号链接(Win 7 或更高版本)实现了这一点。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多