当我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
HOME
gVim.exe在运行时会查找变量。就您而言,Cygwin 环境有自己的HOME
var 集,因此它会使用该变量。
您可以在环境中更改该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。