vimdiff未在cywin和mobaxterm下工作(E97无法创建差异)

vimdiff未在cywin和mobaxterm下工作(E97无法创建差异),vim,cygwin,Vim,Cygwin,在我的PC上,我使用mobaxterm并在其cygwin环境中安装了vim vim和gvim工作正常,没有问题 只有vimdiff不工作,因为我收到错误:“E97:无法创建差异” 我安装了diffutils“GNU diff集合”,并在2上进行了检查 文件,工作正常 我的磁盘没有满 我在不使用.vimrc的情况下运行vim-d或vimdiff,结果是一样的。 所以它不是来自我的vim配置 我使用的是mobaxterm(10.4)和vim v8的最新版本,但问题是 与以前的版本(mobaxter

在我的PC上,我使用mobaxterm并在其cygwin环境中安装了vim

vim和gvim工作正常,没有问题

只有vimdiff不工作,因为我收到错误:“E97:无法创建差异”

  • 我安装了diffutils“GNU diff集合”,并在2上进行了检查 文件,工作正常
  • 我的磁盘没有满
  • 我在不使用.vimrc的情况下运行vim-d或vimdiff,结果是一样的。 所以它不是来自我的vim配置
  • 我使用的是mobaxterm(10.4)和vim v8的最新版本,但问题是 与以前的版本(mobaxterm v9和vim v7.X)相同
  • 我使用-V选项运行vimdiff,得到:

    调用shell执行:“diff-a/tmp/vkjIw1o/0/tmp/vkjIw1o/1>/tmp/vkjIw1o/2” /tmp/vkjIw1o/0/tmp/vkjIw1o/1>/tmp/vkjIw1o/2“

    E97:无法创建差异

我可以看到/tmp/vkjIw1o已经创建,里面没有文件

这与这篇非常古老的文章的情况相同

真烦人,我还有这个问题。 我希望有人能解决这个问题

太平绅士


更多资讯:

1) 我修改了一个文件(vimrc2)。从vim运行这个命令效果很好::!diff~/.vimrc~/vimrc2

@@ -51,7 +51,7 @@
 "
 set showmode
 set ruler
-set cursorline
+"set cursorline
 set number             
2) 对于temp dir,echo tempname()给出了/tmp/vmtID5W/1 然后,我可以将一个文件保存到/tmp中:w/tmp/test.txt


我通过在.virmc文件中添加以下代码解决了此问题:

set diffexpr=MyDiff()
function MyDiff()
  let opt = ""
  if &diffopt =~ "icase"
    let opt = opt . "-i "
  endif
  if &diffopt =~ "iwhite"
    let opt = opt . "-b "
  endif
  silent execute "!/bin/diff.exe -a --binary " . opt . v:fname_in . " " . v:fname_new . " > " . v:fname_out
endfunction
我接受了他的想法 请注意,我必须编写
/bin/diff.exe


感谢您的帮助。

在11.1版之前的很长一段时间里,我一直在MobaXTerm中面临同样的问题。我最终找到了两个原因(和解决方案):

  • E810
    是关于Vim无法写入和读取临时文件的内容。如果运行Squisition,您将获得与之类似的
    E484

  • E97
    是关于Vim调用的
    diff
    可执行文件的错误输出

  • 解析
    E810
    E484
    在我的例子中,这是关于错误的
    设置shellxquote=\“
    ,这是我在搜索解决方案时得到的。该设置负责Vim如何引用文件名。删除它(导致未设置),解决了写入和读取临时文件的错误

    解析
    E97
    这就是
    differexpr
    的作用所在。但这本身可能还不够。在我的例子中,我也必须安装
    diffutils
    包,因为
    /bin/diff
    指向
    busybox
    ,它只支持统一的diff格式,而Vim需要ed样式(即正常)的diff格式

    现在,我的diff可执行文件是:

    lrwxrwx 16 Jan 29 13:26/bin/diff->/bin/busybox.exe*
    -rwxr-xr-x 201.5K 2016年12月6日/bin/diff.exe*
    -rwxr-xr-x 56.0K 2016年12月6日/bin/diff3.exe*
    
    产出的差异是:

    $/bin/diff一二
    ---一个
    +++两个
    @@ -1,3 +1,3 @@
    无变化
    -文件一
    +档案二
    无变化
    $/bin/diff.exe一二
    2c2
    <文件一
    ---
    >档案二
    
    只需在
    differxpr
    功能中指向正确的一个:

    静默执行“!/bin/diff.exe”。选择v:fname_in。" " . v:fname_new。" > " . v:fname_out
    

    甚至不需要
    -a--binary
    选项。

    vimdiff在mintty和windows控制台下工作正常。diffthis命令工作正常吗?如果没有,请检查您的vim是否可以访问外部diff命令,以及您的临时目录是否可读写。您的diff输出看起来像一个统一格式,但vim需要一个正常的格式。请查看“帮助差异”。我发现
    diff
    需要
    -e
    以ed格式输出。我还没有找到如何告诉vim使用该选项。我在这里找到了一个
    diffexpr
    函数,但目前我还没有成功地使它工作。。。仍在调查中。正常格式是diff的默认格式,不需要任何选项(--normal以防万一)。您的差异可能与标准不同,对吗?即使您要使用differxpr,在v:fname_out文件中也应该使用正常格式作为输出。