Windows 7에서 Vimdiff (7.4)를 실행할 수 없습니다


29

최근에 Windows 7 컴퓨터에 7.4 버전의 gVim을 설치했습니다. Windows 탐색기의 상황에 맞는 메뉴에서 두 파일을 비교하려고하면 오류 메시지가 계속 나타납니다.

E810 : 임시 파일을 읽거나 쓸
수 없습니다 E97 : diff를 만들 수 없습니다

선택한 두 파일이 2 창 gVim보기에서 열리고 편집기가 diff 모드 인 것처럼 보이지만 실제 차이점은 강조 표시되지 않습니다.

%TEMP%%TMP%환경 변수가 유효한 디렉토리 이름으로 채워집니다.

일반 gVim 세션에서 파일을 열고 :diffthis명령 프롬프트에 입력 할 때 동일한 응답을 얻습니다 .

이것은 Vim 7.3에서 제대로 작동했지만 v7.4에서 변경된 것으로 보입니다.

두 파일을 어떻게 비교할 수 있습니까?

답변:


45

이 문제는 Windows의 설치 프로그램이 작성한 기본 _vimrc 파일로 인해 발생할 수 있습니다. 여전히 기본 파일을 사용하고 있거나 특정 시점에 복사 한 경우 diffexpr옵션에 지정한 기능을 확인하십시오 . Vim 7.3과 7.4 사이의 패치 중 하나는 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

:version또는 :intro명령을 사용 하거나 시작시 스플래시 화면에서 Vim의 정식 버전을 볼 수 있습니다 .

불행히도 공식 설치 프로그램을 원한다면 8.0까지 기다리거나 야간 빌드를 설치해야합니다 . 그럼에도 불구하고 다른 장소에서 Vim을 설치 하거나 직접 Vim을 구축 할 수 있습니다 .


이 답변이 업데이트되는 경우 스택 오버플로 (보통 두 사이트 모두에서 주제)가 중복됩니다 .


1
인터넷에서 몇 가지 솔루션을 찾았지만 이것이 나를 위해 일한 유일한 솔루션입니다!
ysap

BTW-하위 버전의 번호를 어떻게 알 수 있습니까 (예 : 7.4.103)?
ysap

세 가지 방법 : 빈 버퍼에서 시작하면 패치 레벨을 포함한 버전 정보가 표시되고 :intro명령은 동일한 텍스트를 표시하며 :version명령은 "포함 된 패치"행에 정보를 제공합니다. :version포함 또는 제외 된 기능에 대한 매우 자세한 목록도 제공합니다.

1
또한 Bram은 일반적으로 초기 부 버전 (예 : 7.4.0) 후에 공식 설치 프로그램을 릴리스하지 않습니다. 그러나 컴파일하고 싶지 않다면 가장 최근에 Vim의 설치 프로그램을 얻을 수있는 곳이 많이 있습니다. 가장 자주 인용되는 곳은 sourceforge.net/projects/cream/files/Vim
Ben

1
@Ben은 문제를 해결했는데 다른 원인으로 인해 MyDiff()Windows에서 vim을 사용할 때 사용할 것으로 잘못 이해 했지만 cmd를 통해 vim을 사용하기위한 것입니다 .git bash를 통해 vim을 사용하고 있습니다. 고맙습니다.
Captain Man
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.