vimdiff未在cywin和mobaxterm下工作(E97无法创建差异)
在我的PC上,我使用mobaxterm并在其cygwin环境中安装了vim vim和gvim工作正常,没有问题 只有vimdiff不工作,因为我收到错误:“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
- 我安装了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:无法创建差异
更多资讯: 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文件中也应该使用正常格式作为输出。