この問題は、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を構築します。
スタックオーバーフローで重複(通常、両方のサイトでトピック)、この回答が更新された場合、他のサイトも更新されます。