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.