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

29

J'ai récemment installé la version 7.4 de gVim sur une machine 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 différences

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 remplies avec un nom de répertoire valide.

J'obtiens la même réponse lors de l'ouverture des fichiers dans une session gVim régulière et en tapant :diffthisdans l'invite de commande.

Cela fonctionnait correctement avec Vim 7.3, mais il semblait que quelque chose avait été changé dans la version 7.4.

Comment puis-je différencier les deux fichiers?

ysap
la source

Réponses:

45

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' diffexproption. 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 la 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 la version complète à l' aide des Vim :versionou des :introcommandes, ou à l'écran de démarrage au démarrage.

Malheureusement, si vous voulez un programme d'installation officiel, vous devrez soit attendre la version 8.0, soit installer une version nocturne . Néanmoins, vous pouvez installer Vim à partir d'autres endroits ou créer votre propre Vim .


Dupliqué sur le débordement de la pile (exceptionnellement, sur le sujet sur les deux sites), si cette réponse est mise à jour, il en va de même pour l'autre.

Ben
la source
1
J'ai trouvé quelques solutions sur le net, mais c'est la seule qui a fonctionné pour moi!
ysap
BTW - comment pouvez-vous dire le # de la sous-version (par exemple 7.4.103)?
ysap
Trois façons: le démarrage sur un tampon vide affiche les informations de version, y compris le niveau du correctif, la :introcommande affiche le même texte et la :versioncommande donne les informations sur une ligne de "correctifs inclus". :versiondonne également une liste très détaillée des fonctionnalités incluses ou exclues.
Ben
1
En outre, Bram ne publie généralement aucun programme d'installation officiel après la version mineure initiale, par exemple 7.4.0. Mais il y a beaucoup d'endroits pour obtenir un programme d'installation pour un Vim plus récent si vous n'avez pas envie de compiler, le plus souvent cité étant probablement ici: sourceforge.net/projects/cream/files/Vim
Ben
1
@Ben J'ai résolu le problème, c'était autre chose qui causait cela, et j'ai mal compris que c'était MyDiff()quelque chose à utiliser lors de l'utilisation de vim sur Windows, mais c'est pour quelque chose pour utiliser vim via cmd, j'utilise vim via git bash. Merci.
Captain Man