如何在 Cygwin 中调用 Windows 环境中的 Windows gvim?

如何在 Cygwin 中调用 Windows 环境中的 Windows gvim?

当我gvim在 Cygwin 中发出命令时,我希望它调用我在 Windows 中安装的 gvim。

我尝试在 .bashrc 中编写一个函数,gvim调用 Program Files 文件夹中的 gvim.exe,使用cygpath等等,但问题是,它显然使用 Cygwin 的环境调用 gvim;:echo $HOME打印 C:\cygwin\home\Sundar 而不是 C:\Users\Sundar,并:diffsplit报告创建临时文件失败,我猜想这些文件与此有关。那么,我如何从 Cygwin 调用 gvim,但又让它看起来像是通过“开始”菜单调用的一样?

我尝试更改命令以将 gvim 路径传递给cmd.exe /c,但这也设置了相同的环境。我需要做什么才能使其工作?

答案1

HOMEgVim.exe在运行时会查找变量。就您而言,Cygwin 环境有自己的HOMEvar 集,因此它会使用该变量。

您可以在环境中更改该HOME值,但这可能会影响其他应用程序。不过,您可能想要这样做。如果您不想要这样做,并且假设您的 Cygwin shell 正在使用 Bash shell,由于您已经在问题中建议要创建别名或函数,我建议仅为该命令实例设置 var,Bash 允许您通过在命令之前用空格分隔的方式设置它来执行此操作...

VAR=abc command

上述操作的运行方式command如同VAR设置为 一样abc,无论其实际值是多少。因此...

alias gvim='HOME=/cygdrive/c/Users/Sundar /path/to/gvim.exe'

... 或者...

gvim() { HOME=/cygdrive/c/Users/Sundar /path/to/gvim.exe $1; }

...允许您运行 gVim 可执行文件,并将 varHOME设置为您的首选路径,而不会干扰您的 Cygwin 环境。

答案2

我找到了一种更简单的解决方案,即追踪所需的所有环境变量,尽管它有一个限制。解决方案是explorer.exe filename.ext在 Cygwin 命令行中给出,其中ext是已与 Windows 下的 gVim 关联的扩展。据我所知,这会在完全的 Windows 环境中打开 gVim,$HOME 自动设置为 C:\Users\Sundar,:diffsplit 工作正常且没有错误,等等。现在应该很明显有一个限制 - 您需要有一个带有 gVim 关联扩展的现有文件,否则这将不起作用。

更新:在谷歌搜索此内容时,我偶然发现了 www.commandlinefu.com/commands/view/2729(目前已关闭,纯文本缓存位于http://webcache.googleusercontent.com/search?strip=1&q=cache:http%3A%2F%2Fwww.commandlinefu.com%2Fcommands%2Fview%2F2729),发现explorer.exe 'C:\Program Files (x86)\Vim\vim73\gvim.exe'可以可靠地打开 gvim,而无需依赖文件关联。我现在正在寻找一种方法来将参数传递给以这种方式打开的 gvim。

相关内容