无法在 Windows 7 上运行 Vimdiff (7.4)

无法在 Windows 7 上运行 Vimdiff (7.4)

我最近在 Windows 7 计算机上安装了 7.4 版 gVim。尝试从 Windows 资源管理器上的上下文相关菜单比较两个文件时,我不断收到错误消息:

E810:无法读取或写入临时文件
E97:无法创建差异

选定的两个文件在双窗格 gVim 视图中打开,编辑器似乎处于差异模式,但实际差异并未突出显示。

%TEMP%和环境变量%TMP%都填充了有效的目录名。

在常规 gVim 会话中打开文件并:diffthis在命令提示符中键入时,我得到了相同的响应。

这曾经在 Vim 7.3 中正常工作,但看起来在 v7.4 中发生了一些变化。

我怎样才能区分这两个文件?

答案1

此问题可能是由 Windows 上的安装程序创建的默认 _vimrc 文件引起的。如果您仍在使用该默认文件,或者您在某个时候复制了它,请检查您分配给该diffexpr选项的功能。Vim 7.3 和 7.4 之间的一个补丁为 Windows 上的 cmd.exe shell 引入了新的默认引用规则。此补丁破坏了 MyDiff() 函数中的解决方法,该解决方法旨在修复补丁解决的相同问题。

MyDiff() 函数已在 7.4.103 版中通过修复安装程序进行了修复。如果您只想将其复制到 _vimrc,最新安装程序将为您创建以下 MyDiff() 函数:

 function MyDiff()
   let opt = '-a --binary '
   if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
   if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
   let arg1 = v:fname_in
   if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
   let arg2 = v:fname_new
   if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
   let arg3 = v:fname_out
   if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
   if $VIMRUNTIME =~ ' '
     if &sh =~ '\<cmd'
       if empty(&shellxquote)
         let l:shxq_sav = ''
         set shellxquote&
       endif
       let cmd = '"' . $VIMRUNTIME . '\diff"'
     else
       let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
     endif
   else
     let cmd = $VIMRUNTIME . '\diff'
   endif
   silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
   if exists('l:shxq_sav')
     let &shellxquote=l:shxq_sav
   endif
 endfunction

您可以使用:version:intro命令在 Vim 中查看完整版本,或者在启动时的启动画面中查看完整版本。

不幸的是,如果你想要官方安装程序,你要么需要等到 8.0,要么安装一个每晚构建。不过,你可以从其他地方安装 Vim或者构建你自己的 Vim


Stack Overflow 上重复(不同寻常的是,在两个网站上都是主题相关的),如果这个答案更新了,那么另一个答案也应该更新。

相关内容