Não é possível executar o Vimdiff (7.4) no Windows 7

29

Eu instalei recentemente a versão 7.4 do gVim em uma máquina com Windows 7. Tentando diferenciar dois arquivos do menu sensível ao contexto no Windows Explorer, continuo recebendo as mensagens de erro:

E810: Cannot read or write temp files
E97: Cannot create diffs

Os dois arquivos selecionados são abertos na visualização gVim de dois painéis, e o editor parece estar no modo diff, mas as diferenças reais não são destacadas.

As variáveis de ambiente %TEMP% e %TMP% são preenchidas com um nome de diretório válido.

Eu recebo a mesma resposta ao abrir os arquivos em uma sessão regular do gVim e digitando :diffthis no prompt de comando.

Isso costumava funcionar corretamente com o Vim 7.3, mas parecia que algo foi alterado na v7.4.

Como posso diferenciar os dois arquivos?

    
por ysap 06.01.2014 / 22:59

1 resposta

45

Esse problema pode ser causado pelo arquivo _vimrc padrão criado pelo instalador no Windows. Se você ainda estiver usando esse arquivo padrão ou copiado em algum momento, verifique a função atribuída à opção diffexpr . Um dos patches entre o Vim 7.3 e 7.4 introduziu novas regras de cotação padrão para o shell cmd.exe no Windows. Esse patch quebrou a solução alternativa na função MyDiff () projetada para corrigir o mesmo problema resolvido pelo patch.

A função MyDiff () foi corrigida pela versão 7.4.103 corrigindo o instalador. Aqui está a função MyDiff () que o instalador mais recente criará para você se você quiser copiá-lo para o seu _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

Você pode ver sua versão completa no Vim usando os comandos :version ou :intro ou na tela inicial na inicialização.

Infelizmente, se você quiser um instalador oficial, precisará esperar até 8.0 ou instalar um conjunto noturno . No entanto, você pode instalar o Vim de outros lugares ou construa seu próprio Vim .

Duplicado no Stack Overflow (raramente, no tópico em ambos os sites), se essa resposta for atualizada, o mesmo outro.

    
por 07.01.2014 / 03:04