web-dev-qa-db-fra.com

Impossible d'exécuter Vimdiff (7.4) sur Windows 7

J'ai récemment installé la version 7.4 de gVim sur un ordinateur Windows 7. En essayant de différencier deux fichiers du menu contextuel de l’explorateur Windows, je continue à recevoir les messages d’erreur:

E810: Impossible de lire ou d'écrire des fichiers temporaires
E97: Impossible de créer des diffs

Les deux fichiers sélectionnés sont ouverts dans la vue gVim à deux volets et l'éditeur semble être en mode diff, mais les différences réelles ne sont pas mises en évidence.

Les variables d'environnement %TEMP% et %TMP% sont renseignées avec un nom de répertoire valide.

Je reçois la même réponse lorsque j'ouvre les fichiers dans une session gVim normale et que je tape :diffthis dans la commande Invite.

Auparavant, cela fonctionnait correctement avec Vim 7.3, mais il semblait que quelque chose avait été changé dans la v7.4.

Comment puis-je différencier les deux fichiers?

29
ysap

Ce problème peut être dû au fichier _vimrc par défaut créé par le programme d'installation sous Windows. Si vous utilisez toujours ce fichier par défaut ou si vous l'avez copié à un moment donné, vérifiez la fonction que vous avez attribuée à l'option diffexpr. L'un des correctifs entre Vim 7.3 et 7.4 a introduit de nouvelles règles de cotation par défaut pour le shell cmd.exe sous Windows. Ce correctif a rompu la solution de contournement dans la fonction MyDiff () conçue pour résoudre le même problème résolu par le correctif.

La fonction MyDiff () a été corrigée par la version 7.4.103 en corrigeant le programme d'installation. Voici la fonction MyDiff () que le dernier programme d'installation créera pour vous si vous souhaitez simplement le copier sur votre _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

Vous pouvez voir votre version complète dans Vim à l'aide des commandes :version ou :intro ou sur l'écran de démarrage au démarrage.

Malheureusement, si vous voulez un installateur officiel, vous devrez soit attendre la version 8.0, soit installer une version nocturne . Néanmoins, vous pouvez installer Vim depuis d'autres endroits ou construire votre propre Vim .


dupliqué sur le dépassement de capacité de la pile (inhabituellement, sur le sujet sur les deux sites), si cette réponse est mise à jour, l'autre le devrait.

45
Ben