Windows 7でVimdiff(7.4)を実行できません


29

最近、Windows 7マシンにgVimの7.4バージョンをインストールしました。Windowsエクスプローラーの状況依存メニューから2つのファイルを比較しようとすると、エラーメッセージが表示され続けます。

E810:一時ファイルの読み取りまたは書き込みが
できませんE97:差分を作成できません

選択した2つのファイルは2ペインのgVimビューで開かれ、エディターはdiffモードになっているようですが、実際の違いは強調表示されていません。

%TEMP%そして%TMP%環境変数が有効なディレクトリ名が移入されています。

通常のgVimセッションでファイルを開い:diffthisてコマンドプロンプトに入力するときに、同じ応答が返されます。

これはVim 7.3で正常に機能していましたが、v7.4で何かが変更されたように見えました。

2つのファイルを比較するにはどうすればよいですか?

回答:


45

この問題は、Windowsのインストーラーによって作成されたデフォルトの_vimrcファイルが原因で発生する可能性があります。まだそのデフォルトファイルを使用している場合、またはある時点でコピーした場合は、割り当てた機能をチェックしますdiffexprオプションに。Vim 7.3と7.4の間のパッチの1つは、Windowsのcmd.exeシェルに新しいデフォルトの引用ルールを導入しました。このパッチは、パッチによって解決された同じ問題を修正するために設計された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

Vimでフルバージョンを表示するには、:versionまたは:introコマンドを使用するか、起動時のスプラッシュスクリーンで確認できます。

残念ながら、公式インストーラーが必要な場合は、8.0まで待つか、ナイトリービルドをインストールする必要があります。それにもかかわらず、あなたができる他の場所からVimをインストールしたり、独自のVimを構築します


スタックオーバーフローで重複(通常、両方のサイトでトピック)、この回答が更新された場合、他のサイトも更新されます。


1
当時ネット上でいくつかの解決策を見つけましたが、これが私のために働いた唯一のものです!
ysap 14年

ところで-サブバージョンの番号(7.4.103など)はどうすればわかりますか?
ysap 14年

3つの方法:空のバッファーで起動すると、パッチレベルなどのバージョン情報が表示され、:introコマンドは同じテキストを表示し、:versionコマンドは「含まれるパッチ」行に情報を表示します。:versionまた、含まれる機能または除外される機能の非常に詳細なリストも提供します。
ベン14年

1
また、Bramは通常、最初のマイナーバージョン(7.4.0など)の後に公式インストーラーをリリースしません。しかし、コンパイルする気がなければ、最近のVimのインストーラーを入手する場所がたくさんあります。最も頻繁に引用されるのはおそらくここです:sourceforge.net/projects/cream/files/Vim
Ben

1
@Ben私は問題を修正しました、これはこれを引き起こす他の何かであり、これMyDiff()をWindowsでvimを使用するときに使用するものであると誤解しましたが、cmdを介してvimを使用するためのものであり、git bashを介してvimを使用しています。ありがとうございました。
キャプテンマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.