在我的电脑上我正在使用mobaxterm并在其cygwin环境中安装了vim。
vim和gvim没有问题。
只有vimdiff没有工作,因为我收到错误:“E97:无法创建差异”
我用-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已创建,内部没有文件。
这与旧帖子https://superuser.com/questions/455210/vimdiff-in-cygwin-is-not-working-properly相同。
我还有这个问题很烦人。 我希望有人解决了这个问题。
JP
更多信息:
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
感谢您的帮助。
答案 0 :(得分:0)
很长时间以来,我一直在MobaXTerm中遇到相同的问题,直到版本11.1。我最终发现的原因(和解决方案)有两个方面:
E810
是关于Vim无法写入和读取临时文件。如果您逃犯,您将获得E484
大致相同的信息。
E97
与Vim调用的diff
可执行文件的输出错误有关。
E810
和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
选项。