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?
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.