【发布时间】:2017-09-16 12:55:49
【问题描述】:
在我的电脑上,我使用 mobaxterm 并在其 cygwin 环境中安装了 vim。
vim 和 gvim 工作正常,没有问题。
只有 vimdiff 不起作用,因为我收到错误:“E97:无法创建差异”
- 我安装了 diffutils "GNU collection of 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 已创建,里面没有文件。
这与这篇非常古老的帖子https://superuser.com/questions/455210/vimdiff-in-cygwin-is-not-working-properly 的情况相同。
这很烦人,我仍然有这个问题。 我希望有人解决了这个问题。
日本
更多信息:
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 然后我可以使用 :w /tmp/test.txt
将文件保存到 /tmp我通过在我的 .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
感谢您的帮助。
【问题讨论】:
-
vimdiff 在 mintty 和 windows 控制台下工作正常。
-
:diffthis 命令运行良好吗?如果没有,请检查您的 vim 是否可以访问外部 diff 命令,并且您的临时目录是否可读写。
-
你的 diff 输出看起来像一个统一的格式,但 vim 期望一个正常的。请查看“帮助差异”。
-
我看来
diff需要-e以 ed 格式输出。我还没有找到如何告诉 vim 使用该选项。我在这里找到了一个diffexpr函数github.com/neovim/neovim/issues/1466,但目前我还没有成功使它工作......仍在调查中。 -
普通格式是diff的默认值,不需要任何选项(--normal 以防万一)。您的差异可能与标准不同,对吗?即使您使用 diffexpr,正常格式也应该在 v:fname_out 文件中作为输出。