Vimdiff失败了"无法读取或写入临时文件"

App*_*Fzx 29 vim

我在Windows 7上使用Vim 7.4.

我有一个自定义_vimrc文件,但Vim和gVim都可以正常工作.当我尝试运行时vimdiff .\xxxxx .\yyyyy,它会给出错误

无法读取或写入临时文件

Ben*_*Ben 53

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

通过修复安装程序,版本7.4.103修复了MyDiff()函数.以下是MyDiff()函数,如果您只想将其复制到_vimrc,最新的安装程序将为您创建:

 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
Run Code Online (Sandbox Code Playgroud)

您可以使用:version:intro命令在Vim中查看完整版本,或在启动时在启动屏幕上查看.

官方的Vim 8.0安装程序现已推出,或者您可以安装每晚构建,从其他地方安装Vim构建您自己的Vim.如果您想获取此功能的最新版本,使用这些方法中的任何一种进行安装都可以获得最新的默认vimrc文件.

从我的答案复制到这对超级用户同样的问题.


小智 7

添加:

set shell = c:\ cygwin64\bin\bash.exe

我的_vimrc为我工作.