【发布时间】:2019-06-05 14:31:10
【问题描述】:
我无法让vimdiff 在 Windows 10 机器上工作。我正在从 Powershell 运行 vim。 Powershell 也在$myvimrc 中声明为我选择的shell:
set shell=C:\WINDOWS\system32\WindowsPowershell\v1.0\powershell.exe
我尝试比较的文档未保存为文件。我打开两个垂直拆分,在每个拆分中输入文本,然后运行:windo diffthis。输出为E97: Cannot create diffs。
This article 说我可能需要下载并使用与 gvim 安装的diff.exe 不同的diff.exe。我已经下载了推荐的“GnuWin32 diff”包并将安装目录添加到我的 Windows 路径 ($env:path)。继续按照这些指示,我已经注释掉了默认的 diffexpr 声明,但仍然得到 E97。
我也尝试调用我自己的函数,但无济于事。在这次尝试中,我确保避免使用反斜杠,并将下载的diff.exe 复制到我确信我拥有完全权限的目录中。为了帮助进行故障排除,我暂时保存了我希望比较的两个文件,并明确指定了它们的完整路径,而不是使用 vim 的 v:fname_in 和 v:fname_new(和 v:fname_out)。
set diffexpr=TestDiff()
function TestDiff()
silent execute "!& " . "C:\\diff.exe" . " -a --binary " "C:\\a.edi" . " " . "C:\\b.edi" . " > " . "C:\\tmp.txt"
endfunction
我通过运行:h E97 研究了这个错误,它返回以下信息:
如果 diff 输出看起来没问题,Vim 会做一个测试。如果没有, 您将收到一条错误消息。可能的原因:
- “diff”程序无法执行。
- “diff”程序不会产生正常的“ed”风格差异(见上文)。
- 'shell' 和相关选项设置不正确。尝试过滤是否适用于“:!sort”之类的命令。
- 您正在使用“diffexpr”,但它不起作用。如果不清楚问题出在哪里,请将“详细”选项设置为一个或多个以查看 更多消息。
用于 MS-Windows 的自安装 Vim 包含一个 diff 程序。如果 你没有它,你可能想下载一个 diff.exe。例如 来自http://gnuwin32.sourceforge.net/packages/diffutils.htm。
我相信我通过了这些要求中的前两个,因为生成了tmp.txt 并遵循帮助文件中提供的示例“ed”样式差异。我没有在$myvimrc 中设置其他与shell 相关的参数(shelltype、shellpipe 等),但使用:! 执行其他命令完全没有问题。
:messages中没有其他信息,只有E97错误。
编辑:
如果我从$myvimrc 中删除set shell=C:\WINDOWS\system32\WindowsPowershell\v1.0\powershell.exe,则将shell 默认设置为cmd.exe,diffthis 按预期工作。好像是others have also had this problem when using Powershell。
以下是使用两个 shell 运行 diffthis 时弹出的命令窗口的截图。使用的命令几乎相同。
我推测此尝试的 Powershell 版本中明显的正斜杠是有问题的,但我能够准确地运行此命令(使用虚拟文件代替 .tmp 文件)并输出似乎是用于 diff 的足够文件。我还尝试将正斜杠的substitute 添加到反斜杠无济于事。
【问题讨论】:
-
不管怎样,我已经在我的 Windows 10 机器上安装了 gvim,使用 gvim 的 Windows 安装程序,当我从可点击的图标启动 gvim 时,
:diffthis命令对我来说效果很好。当我从 PowerShell 运行它时,它也运行良好。我不必设置任何变量或任何东西。你有任何可能与 vim 冲突的自定义配置吗? -
当前 vim 自带 diff 功能,你不再需要外部 diff 命令。只需确保您的
diffopt设置包含internal -
我已经用其他信息更新了原始帖子。问题源于将我的
shell定义为 Powershell。
标签: windows powershell vim windows-10 vimdiff