web-dev-qa-db-fra.com

Vimdiff échouant avec "Impossible de lire ou d'écrire des fichiers temporaires"

J'utilise Vim 7.4 sur Windows 7.

J'ai un fichier _vimrc personnalisé, mais Vim et gVim fonctionnent correctement. Lorsque j'essaie d'exécuter vimdiff .\xxxxx .\yyyyy, cela donne l'erreur

Impossible de lire ou d'écrire des fichiers temporaires

28
AppFzx

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.

Le programme d'installation officiel de Vim 8.0 est maintenant disponible ou vous pouvez installer un construction nocturne , installer Vim depuis d'autres emplacements ou construire votre propre Vim . L'installation avec l'une de ces méthodes devrait vous permettre d'obtenir le dernier fichier vimrc par défaut si vous souhaitez récupérer la dernière incarnation de cette fonction.

Copié de ma réponse à cette même question sur Super User .

52
Ben

Ajouter:

définir Shell = c:\cygwin64\bin\bash.exe

à mon _vimrc a travaillé pour moi.

7
Don Mitchell

J'obtenais cette erreur exacte et j'avais inutilement manipulé les autorisations sur le jeu backupdir.

Mais ensuite, je me suis rappelé que j'avais récemment changé pour Windows 7 et que j'utilisais Cygwin 64 et que j'avais oublié de refaire le réglage suivant.

set Shell=c:\\cygwin64\\bin\\zsh.exe shellcmdflag=-c shellxquote=\"

Et hop, l'erreur est partie et voici ce qui fonctionne maintenant:

gvim -d v1.php v2.php

Donc ce que cette erreur dit vraiment, c'est que je ne trouve pas votre Shell ou votre cmd!

4
zzapper

J'ai installé Vim 8.0 sur Windows 7. Après avoir ajouté le répertoire contenant vim à ma variable PATH "diffthis", etc. s’appelait, s’il était appelé à partir d’une ligne de commande CMD. Mais appeler gvim depuis un compte cygwin bash a entraîné l’erreur "E97: ne peut pas créer diff". 

Le _vimrc suivant (inspiré par this et ce post ) a résolu le problème avec cygwin et fonctionne également avec la ligne de commande Windows:

runtime vimrc_example.vim
" Change path to bash with your workstation specific path
set Shell=C:\Programme\cygwin\bin\bash
" Override value of TMP from cygwin (normally set to /tmp)
let $TMP="c:/tmp"

Notez qu'avec le _vimrc ci-dessus, vous perdez le comportement spécifique à Windows de gvim, comme utiliser CTRL-V pour coller, etc. (vous pouvez utiliser SHIFT-Ins de toute façon). Mais avec le comportement activé spécifique à Windows (comme dans _vimrc généré lors de l'installation), gvim n'a pas réussi à exécuter la commande "diffthis" avec l'erreur "E97: ...".

1
user -27

Je recevais aussi les messages 

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

Cependant, mon fichier _vimrc allait bien.

Le problème était que C:\Program Files\Vim\vim74 n'était pas dans la variable d'environnement PATH, donc Vim n'a pas pu lancer diff.exe.

1
Joe Bonds