在我的PC上我使用mobaxterm并在其cygwin环境中安装了vim。
vim和gvim工作正常没有问题。
只有vimdiff无法正常工作,因为我收到错误:“E97:无法创建差异”
我可以看到/ tmp / vkjIw1o已创建,内部没有文件。
这是与这个非常古老的职位https://superuser.com/questions/455210/vimdiff-in-cygwin-is-not-working-properly相同的情况。
我还有这个问题很烦人。我希望有人解决这个问题。
J.P
更多信息:
1)我修改了一个文件(vimrc2)。从vim运行此命令可以正常工作::!diff~ / .vimrc~ / vimrc2
@@ -51,7 +51,7 @@
"
set showmode
set ruler
-set cursorline
+"set cursorline
set number
2)对于临时目录,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
我接受了https://github.com/neovim/neovim/issues/1466的想法请注意,我必须写/bin/diff.exe
谢谢您的帮助。
在版本11.1中,我在MobaXTerm中遇到了同样的问题很长一段时间。我终于找到的原因(和解决方案)是双重的:
E810
是关于Vim无法写入和读取临时文件。如果你运行逃犯,你会得到E484
大致相同。E97
是关于Vim调用的diff
可执行文件的错误输出。E810
and E484
在我的情况下,它是关于错误的set shellxquote=\"
,我在寻找解决方案时得到了。该设置负责Vim如何引用文件名。删除它,导致取消设置,通过写入和读取临时文件解决了错误。
E97
这是diffexpr
帮助的地方。但它本身可能还不够。在我的情况下,我必须安装diffutils
包,因为/bin/diff
指向busybox
,它只支持统一的diff格式,而Vim需要ed样式(即普通)diff格式。
现在我的差异可执行文件是:
lrwxrwxrwx 16 Jan 29 13:26 /bin/diff -> /bin/busybox.exe*
-rwxr-xr-x 201.5K Dec 6 2016 /bin/diff.exe*
-rwxr-xr-x 56.0K Dec 6 2016 /bin/diff3.exe*
产出的差异是:
$ /bin/diff one two
--- one
+++ two
@@ -1,3 +1,3 @@
no change
-file one
+file two
no change
$ /bin/diff.exe one two
2c2
< file one
---
> file two
所有需要做的就是指向diffexpr
函数中的正确的一个:
silent execute "!/bin/diff.exe " . opt . v:fname_in . " " . v:fname_new . " > " . v:fname_out
即使是-a --binary
选项也不是必需的。